Compare commits
No commits in common. "main" and "v0.15.0" have entirely different histories.
12
.envrc
12
.envrc
|
@ -1,8 +1,4 @@
|
|||
if ! [ -d .venv ]
|
||||
then
|
||||
python3 -m venv .venv
|
||||
. .venv/bin/activate
|
||||
pip install -e '.[dev]'
|
||||
else
|
||||
. .venv/bin/activate
|
||||
fi
|
||||
[ -d .venv ] || python -m venv .venv
|
||||
. .venv/bin/activate
|
||||
pip install -U setuptools setuptools_scm wheel
|
||||
pip install -r requirements.txt
|
||||
|
|
17
Makefile
17
Makefile
|
@ -1,5 +1,3 @@
|
|||
PACKAGEVERSION := $(shell ./print-package-version)
|
||||
|
||||
all:
|
||||
|
||||
clean:
|
||||
|
@ -9,20 +7,17 @@ clean:
|
|||
rm -rf *.egg-info build dist
|
||||
|
||||
tag:
|
||||
git tag v$(PACKAGEVERSION)
|
||||
git tag v`python3 setup.py --version`
|
||||
|
||||
publish: clean build
|
||||
# sudo apt install python3-wheel twine
|
||||
publish: build
|
||||
twine upload dist/*
|
||||
|
||||
build: build-only
|
||||
|
||||
build-only: dist/syndicate-py-$(PACKAGEVERSION).tar.gz
|
||||
|
||||
dist/syndicate-py-$(PACKAGEVERSION).tar.gz:
|
||||
python3 -m build
|
||||
build: clean
|
||||
python3 setup.py sdist bdist_wheel
|
||||
|
||||
veryclean: clean
|
||||
rm -rf .venv
|
||||
rm -rf pyenv
|
||||
|
||||
PROTOCOLS_BRANCH=main
|
||||
pull-protocols:
|
||||
|
|
10
README.md
10
README.md
|
@ -8,13 +8,9 @@ or
|
|||
|
||||
git clone https://git.syndicate-lang.org/syndicate-lang/syndicate-py
|
||||
cd syndicate-py
|
||||
python -m venv .venv
|
||||
. .venv/bin/activate
|
||||
pip install -e '.[dev]'
|
||||
|
||||
See also
|
||||
[syndicate-py-packaging](https://git.syndicate-lang.org/syndicate-lang/syndicate-py-packaging)
|
||||
for Debian packaging scripts.
|
||||
virtualenv -p python3 pyenv
|
||||
. pyenv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
|
||||
## Running
|
||||
|
||||
|
|
10
bidi-gc.py
10
bidi-gc.py
|
@ -44,13 +44,13 @@ args = parser.parse_args()
|
|||
#
|
||||
# Here's a trace from a live session of this running against syndicate-rs:
|
||||
#
|
||||
# B --> server: [[1, <assert <Boot #:⌜141/402:00007f3e50021ef0⌝> 3>]]
|
||||
# B --> server: [[1, <assert <Boot #!⌜141/402:00007f3e50021ef0⌝> 3>]]
|
||||
#
|
||||
# A --> server: [[1, <assert <Observe <rec Boot [<bind <_>>]> #:⌜151/422:00007f3e50025090⌝> 3>]]
|
||||
# A <-- server: [[1, <assert [#:⌜141/402:00007f3e50021ef0⌝] 633>]]
|
||||
# A --> server: [[2, <assert <One #:⌜151/422:00007f3e5c009b00⌝> 5>]]
|
||||
# A --> server: [[1, <assert <Observe <rec Boot [<bind <_>>]> #!⌜151/422:00007f3e50025090⌝> 3>]]
|
||||
# A <-- server: [[1, <assert [#!⌜141/402:00007f3e50021ef0⌝] 633>]]
|
||||
# A --> server: [[2, <assert <One #!⌜151/422:00007f3e5c009b00⌝> 5>]]
|
||||
#
|
||||
# B <-- server: [[1, <assert <One #:⌜151/422:00007f3e5c009b00⌝> 643>]]
|
||||
# B <-- server: [[1, <assert <One #!⌜151/422:00007f3e5c009b00⌝> 643>]]
|
||||
# B --> server: [[1, <retract 3>], [2, <assert <Two> 5>]]
|
||||
#
|
||||
# A <-- server: [[2, <assert <Two> 653>]]
|
||||
|
|
3
chat.py
3
chat.py
|
@ -29,8 +29,6 @@ def main():
|
|||
|
||||
@syndicate.relay.connect(args.address, sturdy.SturdyRef.decode(syndicate.parse(args.cap)))
|
||||
def on_connected(ds):
|
||||
turn.on_stop(lambda: turn.stop(root_facet))
|
||||
|
||||
me = 'user_' + str(random.randint(10, 1000))
|
||||
|
||||
turn.publish(ds, Present(me))
|
||||
|
@ -50,3 +48,4 @@ def main():
|
|||
await f.loop.connect_read_pipe(lambda: asyncio.StreamReaderProtocol(reader), sys.stdin)
|
||||
while line := (await reader.readline()).decode('utf-8'):
|
||||
turn.external(f, lambda: turn.send(ds, Says(me, line.strip())))
|
||||
turn.external(f, lambda: turn.stop(root_facet))
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
<require-service <daemon inf>>
|
||||
<daemon inf {
|
||||
argv: "python inf.py"
|
||||
protocol: application/syndicate
|
||||
}>
|
||||
? <service-object <daemon inf> ?cap> [
|
||||
$cap += =here-is-your-configuration!
|
||||
$cap += =here-is-another-configuration!
|
||||
]
|
|
@ -1,5 +0,0 @@
|
|||
#!/bin/sh
|
||||
cd "$(dirname "$0")"
|
||||
. ./.envrc
|
||||
exec python -c \
|
||||
'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])'
|
|
@ -1,50 +0,0 @@
|
|||
[project]
|
||||
name = "syndicate-py"
|
||||
version = "0.19.1"
|
||||
description = "Syndicated Actor model and Syndicate network protocol for Python 3"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.6, <4"
|
||||
license = {text = "GPL-3.0-or-later"}
|
||||
|
||||
authors = [
|
||||
{name = "Tony Garnock-Jones", email = "tonyg@leastfixedpoint.com"},
|
||||
]
|
||||
|
||||
classifiers = [
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Intended Audience :: Developers",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
||||
"Programming Language :: Python :: 3",
|
||||
]
|
||||
|
||||
# "websockets" isn't listed here, but if you want to use relay.WebsocketTunnelRelay,
|
||||
# you will need it.
|
||||
dependencies = [
|
||||
"preserves",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://git.syndicate-lang.org/syndicate-lang/syndicate-py"
|
||||
Issues = "https://git.syndicate-lang.org/syndicate-lang/syndicate-py/issues"
|
||||
|
||||
[project.optional-dependencies]
|
||||
dev = [
|
||||
"build",
|
||||
"twine",
|
||||
]
|
||||
|
||||
[tool.setuptools]
|
||||
packages = [
|
||||
"syndicate",
|
||||
"syndicate.protocols",
|
||||
"syndicate.protocols.schemas",
|
||||
]
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
"syndicate.protocols" = ["*.bin"]
|
||||
"syndicate.protocols.schemas" = ["*.prs"]
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools", "setuptools-scm"]
|
||||
build-backend = "setuptools.build_meta"
|
|
@ -0,0 +1,2 @@
|
|||
websockets
|
||||
preserves
|
|
@ -0,0 +1,26 @@
|
|||
try:
|
||||
from setuptools import setup
|
||||
except ImportError:
|
||||
from distutils.core import setup
|
||||
|
||||
setup(
|
||||
name="syndicate-py",
|
||||
version="0.15.0",
|
||||
author="Tony Garnock-Jones",
|
||||
author_email="tonyg@leastfixedpoint.com",
|
||||
license="GNU General Public License v3 or later (GPLv3+)",
|
||||
classifiers=[
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Intended Audience :: Developers",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules",
|
||||
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
||||
"Programming Language :: Python :: 3",
|
||||
],
|
||||
packages=["syndicate"],
|
||||
url="https://git.syndicate-lang.org/syndicate-lang/syndicate-py",
|
||||
description="Syndicated Actor model and Syndicate network protocol for Python 3",
|
||||
install_requires=['websockets', 'preserves'],
|
||||
python_requires=">=3.6, <4",
|
||||
setup_requires=['setuptools_scm'],
|
||||
include_package_data=True,
|
||||
)
|
|
@ -26,52 +26,45 @@ def run_system(**kwargs):
|
|||
|
||||
class System:
|
||||
def __init__(self, loop = None):
|
||||
self.tasks = set()
|
||||
self.loop = loop or asyncio.get_event_loop()
|
||||
self.inhabitant_count = 0
|
||||
self.exit_signal = asyncio.Queue()
|
||||
|
||||
def run(self, boot_proc, debug = None, name = None, configure_logging = True):
|
||||
def run(self, boot_proc, debug = False, name = None, configure_logging = True):
|
||||
if configure_logging:
|
||||
logging.basicConfig(level = logging.DEBUG if debug else logging.INFO)
|
||||
if debug:
|
||||
self.loop.set_debug(True)
|
||||
self.queue_task(lambda: Actor(boot_proc, system = self, name = name))
|
||||
|
||||
# From Python 3.12, we may be able to use:
|
||||
# asyncio.run(self._run, debug=debug, loop_factory=lambda: self.loop)
|
||||
# but until then:
|
||||
with asyncio.Runner(debug=debug, loop_factory=lambda: self.loop) as r:
|
||||
return r.run(self._run())
|
||||
|
||||
async def _run(self):
|
||||
try:
|
||||
await self.exit_signal.get()
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
finally:
|
||||
log.debug('System._run main loop exit')
|
||||
self.loop.run_forever()
|
||||
except:
|
||||
traceback.print_exc()
|
||||
while asyncio.all_tasks(self.loop):
|
||||
self.loop.stop()
|
||||
self.loop.run_forever()
|
||||
self.loop.close()
|
||||
|
||||
def adjust_engine_inhabitant_count(self, delta):
|
||||
self.inhabitant_count = self.inhabitant_count + delta
|
||||
if self.inhabitant_count == 0:
|
||||
log.debug('Inhabitant count reached zero')
|
||||
self.exit_signal.put_nowait(())
|
||||
self.loop.stop()
|
||||
|
||||
def queue_task(self, thunk):
|
||||
async def task():
|
||||
try:
|
||||
await ensure_awaitable(thunk())
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
return self.loop.create_task(task())
|
||||
finally:
|
||||
self.tasks.remove(t)
|
||||
t = self.loop.create_task(task())
|
||||
self.tasks.add(t)
|
||||
return t
|
||||
|
||||
def queue_task_threadsafe(self, thunk):
|
||||
async def task():
|
||||
try:
|
||||
await ensure_awaitable(thunk())
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
return self.loop.call_soon_threadsafe(lambda: asyncio.run_coroutine_threadsafe(task(), self.loop))
|
||||
await ensure_awaitable(thunk())
|
||||
return asyncio.run_coroutine_threadsafe(task(), self.loop)
|
||||
|
||||
async def ensure_awaitable(value):
|
||||
if inspect.isawaitable(value):
|
||||
|
@ -243,7 +236,11 @@ class Facet:
|
|||
if run_in_executor:
|
||||
inner_coro_fn = coro_fn
|
||||
async def outer_coro_fn(facet):
|
||||
await self.loop.run_in_executor(None, lambda: inner_coro_fn(facet))
|
||||
try:
|
||||
await self.loop.run_in_executor(None, lambda: inner_coro_fn(facet))
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
coro_fn = outer_coro_fn
|
||||
@self.on_stop_or_crash
|
||||
def cancel_linked_task():
|
||||
|
@ -253,20 +250,10 @@ class Facet:
|
|||
task.cancel()
|
||||
task = None
|
||||
async def guarded_task():
|
||||
should_terminate_facet = True
|
||||
try:
|
||||
if await coro_fn(self) is True:
|
||||
should_terminate_facet = False
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
await coro_fn(self)
|
||||
finally:
|
||||
if should_terminate_facet:
|
||||
Turn.external(self, lambda: Turn.active.stop())
|
||||
else:
|
||||
Turn.external(self, cancel_linked_task)
|
||||
Turn.external(self, cancel_linked_task)
|
||||
task = self.loop.create_task(guarded_task())
|
||||
self.linked_tasks.append(task)
|
||||
|
||||
|
|
|
@ -41,13 +41,10 @@ class Graph:
|
|||
|
||||
repaired_this_round = repaired_this_round | workset
|
||||
|
||||
updated_subjects = set()
|
||||
for object_id in workset:
|
||||
for subject_id in self.observers_of(object_id):
|
||||
if subject_id not in updated_subjects:
|
||||
updated_subjects.add(subject_id)
|
||||
self.forget_subject(subject_id)
|
||||
self.with_subject(subject_id, lambda: repair_fn(subject_id))
|
||||
self.forget_subject(subject_id)
|
||||
self.with_subject(subject_id, lambda: repair_fn(subject_id))
|
||||
|
||||
__nextFieldId = 0
|
||||
|
||||
|
|
|
@ -4,10 +4,10 @@ from preserves import preserve
|
|||
|
||||
_dict = dict ## we're about to shadow the builtin
|
||||
|
||||
_ = P.Pattern.discard()
|
||||
_ = P.Pattern.DDiscard(P.DDiscard())
|
||||
|
||||
def bind(p):
|
||||
return P.Pattern.bind(p)
|
||||
return P.Pattern.DBind(P.DBind(p))
|
||||
|
||||
CAPTURE = bind(_)
|
||||
|
||||
|
@ -48,7 +48,7 @@ def quote(p):
|
|||
elif isinstance(p, Record):
|
||||
return _rec(p.key, *map(quote, p.fields))
|
||||
else:
|
||||
return P.Pattern.lit(P.AnyAtom.decode(p))
|
||||
return P.Pattern.DLit(P.DLit(P.AnyAtom.decode(p)))
|
||||
|
||||
def lit(v):
|
||||
if isinstance(v, list) or isinstance(v, tuple):
|
||||
|
@ -60,41 +60,21 @@ def lit(v):
|
|||
elif isinstance(v, Record):
|
||||
return _rec(v.key, *map(lit, v.fields))
|
||||
else:
|
||||
return P.Pattern.lit(P.AnyAtom.decode(v))
|
||||
|
||||
def seq_entries(seq):
|
||||
entries = {}
|
||||
for i, p in enumerate(seq):
|
||||
if p.VARIANT != P.Pattern.discard.VARIANT:
|
||||
entries[i] = p
|
||||
np = len(seq)
|
||||
if np > 0 and (np - 1) not in entries:
|
||||
entries[np - 1] = P.Pattern.discard()
|
||||
return entries
|
||||
|
||||
def unlit_seq(entries):
|
||||
seq = []
|
||||
if len(entries) > 0:
|
||||
try:
|
||||
max_k = max(entries.keys())
|
||||
except TypeError:
|
||||
raise Exception('Pattern entries do not represent a gap-free sequence')
|
||||
for i in range(max_k + 1):
|
||||
seq.append(unlit(entries[i]))
|
||||
return seq
|
||||
return P.Pattern.DLit(P.DLit(P.AnyAtom.decode(v)))
|
||||
|
||||
def unlit(p):
|
||||
if not hasattr(p, 'VARIANT'):
|
||||
p = P.Pattern.decode(p)
|
||||
if p.VARIANT == P.Pattern.lit.VARIANT:
|
||||
return p.value.value
|
||||
if p.VARIANT != P.Pattern.group.VARIANT:
|
||||
if p.VARIANT == P.Pattern.DLit.VARIANT:
|
||||
return p.value.value.value
|
||||
if p.VARIANT != P.Pattern.DCompound.VARIANT:
|
||||
raise Exception('Pattern does not represent a literal value')
|
||||
if p.type.VARIANT == P.GroupType.rec.VARIANT:
|
||||
return Record(p.type.label, unlit_seq(p.entries))
|
||||
if p.type.VARIANT == P.GroupType.arr.VARIANT:
|
||||
return list(unlit_seq(p.entries))
|
||||
if p.type.VARIANT == P.GroupType.dict.VARIANT:
|
||||
p = p.value
|
||||
if p.VARIANT == P.DCompound.rec.VARIANT:
|
||||
return Record(p.label, map(unlit, p.fields))
|
||||
if p.VARIANT == P.DCompound.arr.VARIANT:
|
||||
return list(map(unlit, p.items))
|
||||
if p.VARIANT == P.DCompound.dict.VARIANT:
|
||||
return _dict(map(lambda kv: (kv[0], unlit(kv[1])), p.entries.items()))
|
||||
raise Exception('unreachable')
|
||||
|
||||
|
@ -102,10 +82,10 @@ def rec(labelstr, *members):
|
|||
return _rec(Symbol(labelstr), *members)
|
||||
|
||||
def _rec(label, *members):
|
||||
return P.Pattern.group(P.GroupType.rec(label), seq_entries(members))
|
||||
return P.Pattern.DCompound(P.DCompound.rec(label, members))
|
||||
|
||||
def arr(*members):
|
||||
return P.Pattern.group(P.GroupType.arr(), seq_entries(members))
|
||||
return P.Pattern.DCompound(P.DCompound.arr(members))
|
||||
|
||||
def dict(*kvs):
|
||||
return P.Pattern.group(P.GroupType.dict(), _dict(kvs))
|
||||
return P.Pattern.DCompound(P.DCompound.dict(_dict(kvs)))
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
tcp-remote„´³tupleµ´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„„„„³TcpPeerInfo´³rec´³lit³tcp-peer„´³tupleµ´³named³handle´³embedded³any„„´³named³local´³refµ„³TcpLocal„„´³named³remote´³refµ„³ TcpRemote„„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³http„´³schema·³version°³definitions·³Chunk´³orµµ±string´³atom³String„„µ±bytes´³atom³
|
||||
ByteString„„„„³Headers´³dictof´³atom³Symbol„´³atom³String„„³MimeType´³atom³Symbol„³
|
||||
QueryValue´³orµµ±string´³atom³String„„µ±file´³rec´³lit³file„´³tupleµ´³named³filename´³atom³String„„´³named³headers´³refµ„³Headers„„´³named³body´³atom³
|
||||
ByteString„„„„„„„„³HostPattern´³orµµ±host´³atom³String„„µ±any´³lit€„„„„³HttpBinding´³rec´³lit³ http-bind„´³tupleµ´³named³host´³refµ„³HostPattern„„´³named³port´³atom³
SignedInteger„„´³named³method´³refµ„³
MethodPattern„„´³named³path´³refµ„³PathPattern„„´³named³handler´³embedded´³refµ„³HttpRequest„„„„„„³HttpContext´³rec´³lit³request„´³tupleµ´³named³req´³refµ„³HttpRequest„„´³named³res´³embedded´³refµ„³HttpResponse„„„„„„³HttpRequest´³rec´³lit³http-request„´³tupleµ´³named³sequenceNumber´³atom³
SignedInteger„„´³named³host´³refµ„³RequestHost„„´³named³port´³atom³
SignedInteger„„´³named³method´³atom³Symbol„„´³named³path´³seqof´³atom³String„„„´³named³headers´³refµ„³Headers„„´³named³query´³dictof´³atom³Symbol„´³seqof´³refµ„³
|
||||
QueryValue„„„„´³named³body´³refµ„³RequestBody„„„„„³HttpService´³rec´³lit³http-service„´³tupleµ´³named³host´³refµ„³HostPattern„„´³named³port´³atom³
SignedInteger„„´³named³method´³refµ„³
MethodPattern„„´³named³path´³refµ„³PathPattern„„„„„³PathPattern´³seqof´³refµ„³PathPatternElement„„³RequestBody´³orµµ±absent´³lit€„„µ±present´³atom³
|
||||
ByteString„„„„³RequestHost´³orµµ±absent´³lit€„„µ±present´³atom³String„„„„³HttpListener´³rec´³lit³
http-listener„´³tupleµ´³named³port´³atom³
SignedInteger„„„„„³HttpResponse´³orµµ±status´³rec´³lit³status„´³tupleµ´³named³code´³atom³
SignedInteger„„´³named³message´³atom³String„„„„„„µ±header´³rec´³lit³header„´³tupleµ´³named³name´³atom³Symbol„„´³named³value´³atom³String„„„„„„µ±chunk´³rec´³lit³chunk„´³tupleµ´³named³chunk´³refµ„³Chunk„„„„„„µ±done´³rec´³lit³done„´³tupleµ´³named³chunk´³refµ„³Chunk„„„„„„„„³
MethodPattern´³orµµ±any´³lit€„„µ±specific´³atom³Symbol„„„„³PathPatternElement´³orµµ±label´³atom³String„„µ±wildcard´³lit³_„„µ±rest´³lit³...„„„„„³embeddedType€„„µ³noise„´³schema·³version°³definitions·³Packet´³orµµ±complete´³atom³
|
||||
ByteString„„„„„„„„³HostPattern´³orµµ±host´³atom³String„„µ±any´³lit€„„„„³HttpBinding´³rec´³lit³ http-bind„´³tupleµ´³named³host´³refµ„³HostPattern„„´³named³port´³atom³
SignedInteger„„´³named³method´³refµ„³
MethodPattern„„´³named³path´³refµ„³PathPattern„„´³named³handler´³embedded´³refµ„³HttpRequest„„„„„„³HttpContext´³rec´³lit³request„´³tupleµ´³named³req´³refµ„³HttpRequest„„´³named³res´³embedded´³refµ„³HttpResponse„„„„„„³HttpRequest´³rec´³lit³http-request„´³tupleµ´³named³sequenceNumber´³atom³
SignedInteger„„´³named³host´³atom³String„„´³named³port´³atom³
SignedInteger„„´³named³method´³atom³Symbol„„´³named³path´³seqof´³atom³String„„„´³named³headers´³refµ„³Headers„„´³named³query´³dictof´³atom³Symbol„´³seqof´³refµ„³
|
||||
QueryValue„„„„´³named³body´³refµ„³RequestBody„„„„„³HttpService´³rec´³lit³http-service„´³tupleµ´³named³host´³refµ„³HostPattern„„´³named³port´³atom³
SignedInteger„„´³named³method´³refµ„³
MethodPattern„„´³named³path´³refµ„³PathPattern„„„„„³PathPattern´³seqof´³refµ„³PathPatternElement„„³RequestBody´³orµµ±present´³atom³
|
||||
ByteString„„µ±absent´³lit€„„„„³HttpListener´³rec´³lit³
http-listener„´³tupleµ´³named³port´³atom³
SignedInteger„„„„„³HttpResponse´³orµµ±status´³rec´³lit³status„´³tupleµ´³named³code´³atom³
SignedInteger„„´³named³message´³atom³String„„„„„„µ±header´³rec´³lit³header„´³tupleµ´³named³name´³atom³Symbol„„´³named³value´³atom³String„„„„„„µ±chunk´³rec´³lit³chunk„´³tupleµ´³named³chunk´³refµ„³Chunk„„„„„„µ±done´³rec´³lit³done„´³tupleµ´³named³chunk´³refµ„³Chunk„„„„„„„„³
MethodPattern´³orµµ±any´³lit€„„µ±specific´³atom³Symbol„„„„³PathPatternElement´³orµµ±label´³atom³String„„µ±wildcard´³lit³_„„µ±rest´³lit³...„„„„„³embeddedType€„„µ³noise„´³schema·³version°³definitions·³Packet´³orµµ±complete´³atom³
|
||||
ByteString„„µ±
|
||||
fragmented´³seqof´³atom³
|
||||
ByteString„„„„„³ Initiator´³rec´³lit³ initiator„´³tupleµ´³named³initiatorSession´³embedded´³refµ„³Packet„„„„„„³ NoiseSpec´³andµ´³dict·³key´³named³key´³atom³
|
||||
ByteString„„³service´³named³service´³refµ„³ServiceSelector„„„„´³named³protocol´³refµ„³
NoiseProtocol„„´³named³
preSharedKeys´³refµ„³NoisePreSharedKeys„„„„³SessionItem´³orµµ± Initiator´³refµ„³ Initiator„„µ±Packet´³refµ„³Packet„„„„³
NoiseProtocol´³orµµ±present´³dict·³protocol´³named³protocol´³atom³String„„„„„µ±invalid´³dict·³protocol´³named³protocol³any„„„„µ±absent´³dict·„„„„„³
NoiseStepType´³lit³noise„³SecretKeyField´³orµµ±present´³dict·³ secretKey´³named³ secretKey´³atom³
|
||||
ByteString„„„„„³ NoiseSpec´³andµ´³dict·³key´³named³key´³atom³
|
||||
ByteString„„³service´³named³service´³refµ„³ServiceSelector„„„„´³named³protocol´³refµ„³
NoiseProtocol„„´³named³
preSharedKeys´³refµ„³NoisePreSharedKeys„„„„³
NoiseProtocol´³orµµ±present´³dict·³protocol´³named³protocol´³atom³String„„„„„µ±invalid´³dict·³protocol´³named³protocol³any„„„„µ±absent´³dict·„„„„„³
NoiseStepType´³lit³noise„³SecretKeyField´³orµµ±present´³dict·³ secretKey´³named³ secretKey´³atom³
|
||||
ByteString„„„„„µ±invalid´³dict·³ secretKey´³named³ secretKey³any„„„„µ±absent´³dict·„„„„„³DefaultProtocol´³lit±!Noise_NK_25519_ChaChaPoly_BLAKE2s„³NoiseStepDetail´³refµ„³ServiceSelector„³ServiceSelector³any³NoiseServiceSpec´³andµ´³named³base´³refµ„³ NoiseSpec„„´³named³ secretKey´³refµ„³SecretKeyField„„„„³NoisePreSharedKeys´³orµµ±present´³dict·³
preSharedKeys´³named³
preSharedKeys´³seqof´³atom³
|
||||
ByteString„„„„„„µ±invalid´³dict·³
preSharedKeys´³named³
preSharedKeys³any„„„„µ±absent´³dict·„„„„„³NoisePathStepDetail´³refµ„³ NoiseSpec„³NoiseDescriptionDetail´³refµ„³NoiseServiceSpec„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³timer„´³schema·³version°³definitions·³SetTimer´³rec´³lit³ set-timer„´³tupleµ´³named³label³any„´³named³seconds´³atom³Double„„´³named³kind´³refµ„³ TimerKind„„„„„³ LaterThan´³rec´³lit³
|
||||
ByteString„„„„„„µ±invalid´³dict·³
preSharedKeys´³named³
preSharedKeys³any„„„„µ±absent´³dict·„„„„„³NoisePathStepDetail´³refµ„³ NoiseSpec„³NoiseDescriptionDetail´³refµ„³NoiseServiceSpec„„³embeddedType€„„µ³timer„´³schema·³version°³definitions·³SetTimer´³rec´³lit³ set-timer„´³tupleµ´³named³label³any„´³named³seconds´³atom³Double„„´³named³kind´³refµ„³ TimerKind„„„„„³ LaterThan´³rec´³lit³
|
||||
later-than„´³tupleµ´³named³seconds´³atom³Double„„„„„³ TimerKind´³orµµ±relative´³lit³relative„„µ±absolute´³lit³absolute„„µ±clear´³lit³clear„„„„³TimerExpired´³rec´³lit³
timer-expired„´³tupleµ´³named³label³any„´³named³seconds´³atom³Double„„„„„„³embeddedType€„„µ³trace„´³schema·³version°³definitions·³Oid³any³Name´³orµµ± anonymous´³rec´³lit³ anonymous„´³tupleµ„„„„µ±named´³rec´³lit³named„´³tupleµ´³named³name³any„„„„„„„³Target´³rec´³lit³entity„´³tupleµ´³named³actor´³refµ„³ActorId„„´³named³facet´³refµ„³FacetId„„´³named³oid´³refµ„³Oid„„„„„³TaskId³any³TurnId³any³ActorId³any³FacetId³any³ TurnCause´³orµµ±turn´³rec´³lit³ caused-by„´³tupleµ´³named³id´³refµ„³TurnId„„„„„„µ±cleanup´³rec´³lit³cleanup„´³tupleµ„„„„µ±linkedTaskRelease´³rec´³lit³linked-task-release„´³tupleµ´³named³id´³refµ„³TaskId„„´³named³reason´³refµ„³LinkedTaskReleaseReason„„„„„„µ±periodicActivation´³rec´³lit³periodic-activation„´³tupleµ´³named³period´³atom³Double„„„„„„µ±delay´³rec´³lit³delay„´³tupleµ´³named³causingTurn´³refµ„³TurnId„„´³named³amount´³atom³Double„„„„„„µ±external´³rec´³lit³external„´³tupleµ´³named³description³any„„„„„„„³ TurnEvent´³orµµ±assert´³rec´³lit³assert„´³tupleµ´³named³ assertion´³refµ„³AssertionDescription„„´³named³handle´³refµ³protocol„³Handle„„„„„„µ±retract´³rec´³lit³retract„´³tupleµ´³named³handle´³refµ³protocol„³Handle„„„„„„µ±message´³rec´³lit³message„´³tupleµ´³named³body´³refµ„³AssertionDescription„„„„„„µ±sync´³rec´³lit³sync„´³tupleµ´³named³peer´³refµ„³Target„„„„„„µ± breakLink´³rec´³lit³
|
||||
break-link„´³tupleµ´³named³source´³refµ„³ActorId„„´³named³handle´³refµ³protocol„³Handle„„„„„„„„³
|
||||
ExitStatus´³orµµ±ok´³lit³ok„„µ±Error´³refµ³protocol„³Error„„„„³
|
||||
|
@ -18,13 +18,9 @@ TraceEntry
|
|||
ExitStatus„„„„„„„„³FacetStopReason´³orµµ±explicitAction´³lit³explicit-action„„µ±inert´³lit³inert„„µ±parentStopping´³lit³parent-stopping„„µ±
actorStopping´³lit³actor-stopping„„„„³TurnDescription´³rec´³lit³turn„´³tupleµ´³named³id´³refµ„³TurnId„„´³named³cause´³refµ„³ TurnCause„„´³named³actions´³seqof´³refµ„³ActionDescription„„„„„„³ActionDescription´³orµµ±dequeue´³rec´³lit³dequeue„´³tupleµ´³named³event´³refµ„³TargetedTurnEvent„„„„„„µ±enqueue´³rec´³lit³enqueue„´³tupleµ´³named³event´³refµ„³TargetedTurnEvent„„„„„„µ±dequeueInternal´³rec´³lit³dequeue-internal„´³tupleµ´³named³event´³refµ„³TargetedTurnEvent„„„„„„µ±enqueueInternal´³rec´³lit³enqueue-internal„´³tupleµ´³named³event´³refµ„³TargetedTurnEvent„„„„„„µ±spawn´³rec´³lit³spawn„´³tupleµ´³named³link´³atom³Boolean„„´³named³id´³refµ„³ActorId„„„„„„µ±link´³rec´³lit³link„´³tupleµ´³named³parentActor´³refµ„³ActorId„„´³named³
childToParent´³refµ³protocol„³Handle„„´³named³
|
||||
childActor´³refµ„³ActorId„„´³named³
parentToChild´³refµ³protocol„³Handle„„„„„„µ±
|
||||
facetStart´³rec´³lit³facet-start„´³tupleµ´³named³path´³seqof´³refµ„³FacetId„„„„„„„µ± facetStop´³rec´³lit³
|
||||
facet-stop„´³tupleµ´³named³path´³seqof´³refµ„³FacetId„„„´³named³reason´³refµ„³FacetStopReason„„„„„„µ±linkedTaskStart´³rec´³lit³linked-task-start„´³tupleµ´³named³taskName´³refµ„³Name„„´³named³id´³refµ„³TaskId„„„„„„„„³TargetedTurnEvent´³rec´³lit³event„´³tupleµ´³named³target´³refµ„³Target„„´³named³detail´³refµ„³ TurnEvent„„„„„³AssertionDescription´³orµµ±value´³rec´³lit³value„´³tupleµ´³named³value³any„„„„„µ±opaque´³rec´³lit³opaque„´³tupleµ´³named³description³any„„„„„„„³LinkedTaskReleaseReason´³orµµ± cancelled´³lit³ cancelled„„µ±normal´³lit³normal„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³stdenv„´³schema·³version°³definitions·³
StandardRoute´³orµµ±standard´³tuplePrefixµ´³named³
|
||||
transports´³seqof´³refµ„³StandardTransport„„„´³named³key´³atom³
|
||||
ByteString„„´³named³service³any„´³named³sig´³atom³
|
||||
ByteString„„´³named³oid³any„„´³named³caveats´³seqof´³refµ³sturdy„³Caveat„„„„„µ±general´³refµ³
|
||||
gatekeeper„³Route„„„„³StandardTransport´³orµµ±wsUrl´³atom³String„„µ±other³any„„„„³embeddedType€„„µ³stream„´³schema·³version°³definitions·³Mode´³orµµ±bytes´³lit³bytes„„µ±lines´³refµ„³LineMode„„µ±packet´³rec´³lit³packet„´³tupleµ´³named³size´³atom³
SignedInteger„„„„„„µ±object´³rec´³lit³object„´³tupleµ´³named³description³any„„„„„„„³Sink´³orµµ±source´³rec´³lit³source„´³tupleµ´³named³
|
||||
facet-stop„´³tupleµ´³named³path´³seqof´³refµ„³FacetId„„„´³named³reason´³refµ„³FacetStopReason„„„„„„µ±linkedTaskStart´³rec´³lit³linked-task-start„´³tupleµ´³named³taskName´³refµ„³Name„„´³named³id´³refµ„³TaskId„„„„„„„„³TargetedTurnEvent´³rec´³lit³event„´³tupleµ´³named³target´³refµ„³Target„„´³named³detail´³refµ„³ TurnEvent„„„„„³AssertionDescription´³orµµ±value´³rec´³lit³value„´³tupleµ´³named³value³any„„„„„µ±opaque´³rec´³lit³opaque„´³tupleµ´³named³description³any„„„„„„„³LinkedTaskReleaseReason´³orµµ± cancelled´³lit³ cancelled„„µ±normal´³lit³normal„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³stream„´³schema·³version°³definitions·³Mode´³orµµ±bytes´³lit³bytes„„µ±lines´³refµ„³LineMode„„µ±packet´³rec´³lit³packet„´³tupleµ´³named³size´³atom³
SignedInteger„„„„„„µ±object´³rec´³lit³object„´³tupleµ´³named³description³any„„„„„„„³Sink´³orµµ±source´³rec´³lit³source„´³tupleµ´³named³
|
||||
controller´³embedded´³refµ„³Source„„„„„„„µ±StreamError´³refµ„³StreamError„„µ±data´³rec´³lit³data„´³tupleµ´³named³payload³any„´³named³mode´³refµ„³Mode„„„„„„µ±eof´³rec´³lit³eof„´³tupleµ„„„„„„³Source´³orµµ±sink´³rec´³lit³sink„´³tupleµ´³named³
|
||||
controller´³embedded´³refµ„³Sink„„„„„„„µ±StreamError´³refµ„³StreamError„„µ±credit´³rec´³lit³credit„´³tupleµ´³named³amount´³refµ„³CreditAmount„„´³named³mode´³refµ„³Mode„„„„„„„„³LineMode´³orµµ±lf´³lit³lf„„µ±crlf´³lit³crlf„„„„³StreamError´³rec´³lit³error„´³tupleµ´³named³message´³atom³String„„„„„³CreditAmount´³orµµ±count´³atom³
SignedInteger„„µ± unbounded´³lit³ unbounded„„„„³StreamConnection´³rec´³lit³stream-connection„´³tupleµ´³named³source´³embedded´³refµ„³Source„„„´³named³sink´³embedded´³refµ„³Sink„„„´³named³spec³any„„„„³StreamListenerError´³rec´³lit³stream-listener-error„´³tupleµ´³named³spec³any„´³named³message´³atom³String„„„„„³StreamListenerReady´³rec´³lit³stream-listener-ready„´³tupleµ´³named³spec³any„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³sturdy„´³schema·³version°³definitions·³Lit´³rec´³lit³lit„´³tupleµ´³named³value³any„„„„³Oid´³atom³
SignedInteger„³Alts´³rec´³lit³or„´³tupleµ´³named³alternatives´³seqof´³refµ„³Rewrite„„„„„„³PAnd´³rec´³lit³and„´³tupleµ´³named³patterns´³seqof´³refµ„³Pattern„„„„„„³PNot´³rec´³lit³not„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³TRef´³rec´³lit³ref„´³tupleµ´³named³binding´³atom³
SignedInteger„„„„„³PAtom´³orµµ±Boolean´³lit³Boolean„„µ±Double´³lit³Double„„µ±
SignedInteger´³lit³
SignedInteger„„µ±String´³lit³String„„µ±
|
||||
controller´³embedded´³refµ„³Sink„„„„„„„µ±StreamError´³refµ„³StreamError„„µ±credit´³rec´³lit³credit„´³tupleµ´³named³amount´³refµ„³CreditAmount„„´³named³mode´³refµ„³Mode„„„„„„„„³LineMode´³orµµ±lf´³lit³lf„„µ±crlf´³lit³crlf„„„„³StreamError´³rec´³lit³error„´³tupleµ´³named³message´³atom³String„„„„„³CreditAmount´³orµµ±count´³atom³
SignedInteger„„µ± unbounded´³lit³ unbounded„„„„³StreamConnection´³rec´³lit³stream-connection„´³tupleµ´³named³source´³embedded´³refµ„³Source„„„´³named³sink´³embedded´³refµ„³Sink„„„´³named³spec³any„„„„³StreamListenerError´³rec´³lit³stream-listener-error„´³tupleµ´³named³spec³any„´³named³message´³atom³String„„„„„³StreamListenerReady´³rec´³lit³stream-listener-ready„´³tupleµ´³named³spec³any„„„„„³embeddedType´³refµ³ EntityRef„³Cap„„„µ³sturdy„´³schema·³version°³definitions·³Lit´³rec´³lit³lit„´³tupleµ´³named³value³any„„„„³Oid´³atom³
SignedInteger„³Alts´³rec´³lit³or„´³tupleµ´³named³alternatives´³seqof´³refµ„³Rewrite„„„„„„³PAnd´³rec´³lit³and„´³tupleµ´³named³patterns´³seqof´³refµ„³Pattern„„„„„„³PNot´³rec´³lit³not„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³TRef´³rec´³lit³ref„´³tupleµ´³named³binding´³atom³
SignedInteger„„„„„³PAtom´³orµµ±Boolean´³lit³Boolean„„µ±Float´³lit³Float„„µ±Double´³lit³Double„„µ±
SignedInteger´³lit³
SignedInteger„„µ±String´³lit³String„„µ±
|
||||
ByteString´³lit³
|
||||
ByteString„„µ±Symbol´³lit³Symbol„„„„³PBind´³rec´³lit³bind„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³Caveat´³orµµ±Rewrite´³refµ„³Rewrite„„µ±Alts´³refµ„³Alts„„µ±Reject´³refµ„³Reject„„µ±unknown³any„„„³Reject´³rec´³lit³reject„´³tupleµ´³named³pattern´³refµ„³Pattern„„„„„³Pattern´³orµµ±PDiscard´³refµ„³PDiscard„„µ±PAtom´³refµ„³PAtom„„µ± PEmbedded´³refµ„³ PEmbedded„„µ±PBind´³refµ„³PBind„„µ±PAnd´³refµ„³PAnd„„µ±PNot´³refµ„³PNot„„µ±Lit´³refµ„³Lit„„µ± PCompound´³refµ„³ PCompound„„„„³Rewrite´³rec´³lit³rewrite„´³tupleµ´³named³pattern´³refµ„³Pattern„„´³named³template´³refµ„³Template„„„„„³WireRef´³orµµ±mine´³tupleµ´³lit° |