nandi/frqpublic Fork 0
9f081a1
Commits
Clone
git clone https://git.rickub.com/nandi/frq.git
git clone ssh://git@rickub.com/nandi/frq.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Bind libmoq_ffi from the object's own metadata, not from its header

moq-ffi publishes MoQ over QUIC behind UniFFI's C ABI, prebuilt for both
Linux architectures, which is the transport half of a call without the 440
crates that building it entails. This takes those bytes and declares them.

The bindings are GENERATED from the .so rather than transcribed from the C
header the release ships, because the two do not describe the same library:
moq-ffi's `audio` and `video` features are on by default and are off in the
Linux and Android artifacts, so the header has 230 entry points where our
object has 206, with the whole moqaudio*/moqvideo* surface among the
missing. Binding the header would have linked on a Mac and failed on both
platforms frq ships to. UniFFI embeds its interface metadata in the object,
so `just gen-moq` reads it back out and emits src/frq/moq/raw.clj — 403
entry points, none inferred: a ctype the generator does not know is reported
and left unbound rather than given a plausible width, which would be a
silent memory bug instead of a compile error.

frq.moq.uniffi is the substrate: the RustBuffer and RustCallStatus layouts,
the out-parameter wrapper nearly every call wears, UTF-8 in and out, and the
future family. Async keeps frq.av's contract rather than bending it — the
continuation tokio invokes from a thread jolt never started lives in an
auto-arena, is :collect-safe, and does nothing but set an atom, so the loop
thread polls a future exactly as pump! already polls the media plane.

Nothing moves off libjoltmoq yet; both objects are declared, and frq.moq.smoke
is what says the layouts are real -- contract version, a handle constructed
and freed, and a 29-character string that is 33 bytes on the other side.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nandi committed 2026-09-09T23:20:30-07:00 Browse files
9f081a1 parent: 7bc4770
modified deps.edn +15 -1
@@ -32,7 +32,21 @@
3232 :linux ["libvidya.so"]}
3333 {:name "joltmoq"
3434 :darwin ["libjoltmoq.dylib"]
35- :linux ["libjoltmoq.so"]}]
35+ :linux ["libjoltmoq.so"]}
36+ ;; moq-ffi's own object, fetched from its release rather than
37+ ;; built — see the flake. It is not a second media plane: it is
38+ ;; the transport half alone, behind UniFFI's C ABI, and it is
39+ ;; here so `frq.moq.*` has something to load while the port off
40+ ;; libjoltmoq happens. Both are declared for now, and the day
41+ ;; frq.av stops calling joltmoq_* is the day that entry goes.
42+ ;;
43+ ;; No :darwin — the release's Mac artifact is a DIFFERENT BUILD
44+ ;; (moq-ffi's audio/video features are on there and off here),
45+ ;; so naming a .dylib would load an object with 24 entry points
46+ ;; the generated bindings do not describe. Linux and Android
47+ ;; only, until they are built the same way.
48+ {:name "moq_ffi"
49+ :linux ["libmoq_ffi.so"]}]
3650
3751 :aliases {:frq {:main-opts ["-m" "frq.app"]}
3852
@@ -32,7 +32,21 @@
32 :linux ["libvidya.so"]}32 :linux ["libvidya.so"]}
33 {:name "joltmoq"33 {:name "joltmoq"
34 :darwin ["libjoltmoq.dylib"]34 :darwin ["libjoltmoq.dylib"]
35- :linux ["libjoltmoq.so"]}]35+ :linux ["libjoltmoq.so"]}
36+ ;; moq-ffi's own object, fetched from its release rather than
37+ ;; built — see the flake. It is not a second media plane: it is
38+ ;; the transport half alone, behind UniFFI's C ABI, and it is
39+ ;; here so `frq.moq.*` has something to load while the port off
40+ ;; libjoltmoq happens. Both are declared for now, and the day
41+ ;; frq.av stops calling joltmoq_* is the day that entry goes.
42+ ;;
43+ ;; No :darwin — the release's Mac artifact is a DIFFERENT BUILD
44+ ;; (moq-ffi's audio/video features are on there and off here),
45+ ;; so naming a .dylib would load an object with 24 entry points
46+ ;; the generated bindings do not describe. Linux and Android
47+ ;; only, until they are built the same way.
48+ {:name "moq_ffi"
49+ :linux ["libmoq_ffi.so"]}]
36 50
37 :aliases {:frq {:main-opts ["-m" "frq.app"]}51 :aliases {:frq {:main-opts ["-m" "frq.app"]}
38 52
modified flake.nix +68 -5
@@ -182,6 +182,69 @@
182182 # PipeWire's rather than raw ALSA PCMs.
183183 native = jolt-native.packages.${pkgs.stdenv.hostPlatform.system}.default;
184184
185+ # libmoq_ffi — MoQ over QUIC behind UniFFI's C ABI, FETCHED rather
186+ # than built. This is the object `frq.moq.raw` is generated from.
187+ #
188+ # Fetched because building it is the thing this whole exercise is
189+ # about: moq-ffi pulls moq-native, iroh, quinn, rustls and aws-lc-sys
190+ # behind it, which is 440 crates that nothing else in this tree
191+ # needs. Upstream already publishes the object for both Linux
192+ # architectures, so we take those bytes.
193+ #
194+ # Pinned to a release and to a hash, and the hashes below are
195+ # upstream's own published .sha256 files rather than ones observed
196+ # here — a `nix-prefetch` of whatever the URL serves today would
197+ # record that it downloaded something, not that it downloaded the
198+ # right thing.
199+ #
200+ # WHAT THIS BUILD IS NOT: moq-ffi's `audio` and `video` features are
201+ # on by default upstream and are OFF in these artifacts, so there is
202+ # no publish_audio/publish_video and no moqaudio*/moqvideo* here —
203+ # 206 functions where the Apple artifact has 230. That is why the
204+ # bindings are generated from the object (`just gen-moq`) and not
205+ # from the C header the release ships, which describes the Apple one.
206+ moqFfi =
207+ let
208+ version = "0.3.17";
209+ target = {
210+ "x86_64-linux" = "x86_64-unknown-linux-gnu";
211+ "aarch64-linux" = "aarch64-unknown-linux-gnu";
212+ }.${pkgs.stdenv.hostPlatform.system};
213+ hash = {
214+ "x86_64-linux" = "sha256-dzQXpV4JgdtD+g33WX51FFAQdfCUXkNsx1xPbobPfUI=";
215+ "aarch64-linux" = "sha256-PdzRwbJFqOZWRgI0HHX2XUH+Ljh4V3jvQ9asfvCuIPA=";
216+ }.${pkgs.stdenv.hostPlatform.system};
217+ in
218+ pkgs.stdenv.mkDerivation {
219+ pname = "libmoq-ffi";
220+ inherit version;
221+ src = pkgs.fetchurl {
222+ url = "https://github.com/kixelated/moq/releases/download/moq-ffi-v${version}/moq-ffi-${version}-${target}-libmoq_ffi.so";
223+ inherit hash;
224+ };
225+ dontUnpack = true;
226+ # It carries no RUNPATH and needs libgcc_s, libm and libc — the
227+ # host's on an ordinary distro, and nothing at all on NixOS
228+ # unless they are bound here.
229+ nativeBuildInputs = [ pkgs.autoPatchelfHook ];
230+ buildInputs = [ pkgs.stdenv.cc.cc.lib ];
231+ installPhase = ''
232+ mkdir -p $out/lib
233+ cp $src $out/lib/libmoq_ffi.so
234+ chmod +w $out/lib/libmoq_ffi.so
235+ '';
236+ };
237+
238+ # One directory for the loader to look in. jolt resolves every
239+ # :jolt/native name against JOLT_NATIVE_LIB, and the objects now come
240+ # from two places — jolt-native's flake, and the moq-ffi release — so
241+ # they are joined rather than the path being made a list, which the
242+ # loader does not take.
243+ nativeAll = pkgs.symlinkJoin {
244+ name = "frq-native";
245+ paths = [ native moqFfi ];
246+ };
247+
185248 # Jolt itself: Clojure on Chez, built the way its own flake builds it.
186249 # A function, because there are two of them — upstream for the
187250 # desktop, and the Bionic-addrinfo fork for the boot image the APK
@@ -253,7 +316,7 @@
253316 # read-only directory and jolt treats that as a quiet cache miss, so
254317 # the only cost is re-resolving the (already local) graph per start.
255318 frqScript = pkgs.writeShellScript "frq" ''
256- export LD_LIBRARY_PATH="${native}/lib:${lib.makeLibraryPath runtimeLibs}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
319+ export LD_LIBRARY_PATH="${nativeAll}/lib:${lib.makeLibraryPath runtimeLibs}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
257320 cd ${frqSource}
258321
259322 # On NixOS the store's Mesa is the system's and the window opens.
@@ -271,7 +334,7 @@
271334 # a terminal is the one surface that needs nothing from the host but
272335 # a terminal, which is the reason this output exists.
273336 tuiScript = pkgs.writeShellScript "frq-tui" ''
274- export LD_LIBRARY_PATH="${native}/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
337+ export LD_LIBRARY_PATH="${nativeAll}/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
275338 cd ${frqSource}
276339
277340 exec ${joltRuntime}/bin/jolt \
@@ -334,7 +397,7 @@
334397 };
335398 in
336399 {
337- inherit native frq;
400+ inherit native moqFfi nativeAll frq;
338401 inherit tui;
339402 jolt = joltRuntime;
340403 default = frq;
@@ -380,7 +443,7 @@
380443 devShells = forEachSystem (pkgs:
381444 let
382445 inherit (pkgs) lib;
383- inherit (self.packages.${pkgs.stdenv.hostPlatform.system}) jolt native;
446+ inherit (self.packages.${pkgs.stdenv.hostPlatform.system}) jolt native nativeAll;
384447 in
385448 {
386449 default = pkgs.mkShellNoCC {
@@ -397,7 +460,7 @@
397460 # source `just run` runs is the working tree, so the launcher has
398461 # to live in that tree and the shell has to hand it its answers.
399462 # Naming these is also what makes the shell build them.
400- JOLT_NATIVE_LIB = "${native}/lib";
463+ JOLT_NATIVE_LIB = "${nativeAll}/lib";
401464 GLIMMER_SRC = glimmer;
402465 GLIMMER_VIDYA_SRC = "${jolt-native}/glimmer-backends/glimmer-vidya";
403466 GLIMMER_TUI_SRC = "${jolt-native}/glimmer-backends/glimmer-tui";
@@ -182,6 +182,69 @@
182 # PipeWire's rather than raw ALSA PCMs.182 # PipeWire's rather than raw ALSA PCMs.
183 native = jolt-native.packages.${pkgs.stdenv.hostPlatform.system}.default;183 native = jolt-native.packages.${pkgs.stdenv.hostPlatform.system}.default;
184 184
185+ # libmoq_ffi — MoQ over QUIC behind UniFFI's C ABI, FETCHED rather
186+ # than built. This is the object `frq.moq.raw` is generated from.
187+ #
188+ # Fetched because building it is the thing this whole exercise is
189+ # about: moq-ffi pulls moq-native, iroh, quinn, rustls and aws-lc-sys
190+ # behind it, which is 440 crates that nothing else in this tree
191+ # needs. Upstream already publishes the object for both Linux
192+ # architectures, so we take those bytes.
193+ #
194+ # Pinned to a release and to a hash, and the hashes below are
195+ # upstream's own published .sha256 files rather than ones observed
196+ # here — a `nix-prefetch` of whatever the URL serves today would
197+ # record that it downloaded something, not that it downloaded the
198+ # right thing.
199+ #
200+ # WHAT THIS BUILD IS NOT: moq-ffi's `audio` and `video` features are
201+ # on by default upstream and are OFF in these artifacts, so there is
202+ # no publish_audio/publish_video and no moqaudio*/moqvideo* here —
203+ # 206 functions where the Apple artifact has 230. That is why the
204+ # bindings are generated from the object (`just gen-moq`) and not
205+ # from the C header the release ships, which describes the Apple one.
206+ moqFfi =
207+ let
208+ version = "0.3.17";
209+ target = {
210+ "x86_64-linux" = "x86_64-unknown-linux-gnu";
211+ "aarch64-linux" = "aarch64-unknown-linux-gnu";
212+ }.${pkgs.stdenv.hostPlatform.system};
213+ hash = {
214+ "x86_64-linux" = "sha256-dzQXpV4JgdtD+g33WX51FFAQdfCUXkNsx1xPbobPfUI=";
215+ "aarch64-linux" = "sha256-PdzRwbJFqOZWRgI0HHX2XUH+Ljh4V3jvQ9asfvCuIPA=";
216+ }.${pkgs.stdenv.hostPlatform.system};
217+ in
218+ pkgs.stdenv.mkDerivation {
219+ pname = "libmoq-ffi";
220+ inherit version;
221+ src = pkgs.fetchurl {
222+ url = "https://github.com/kixelated/moq/releases/download/moq-ffi-v${version}/moq-ffi-${version}-${target}-libmoq_ffi.so";
223+ inherit hash;
224+ };
225+ dontUnpack = true;
226+ # It carries no RUNPATH and needs libgcc_s, libm and libc — the
227+ # host's on an ordinary distro, and nothing at all on NixOS
228+ # unless they are bound here.
229+ nativeBuildInputs = [ pkgs.autoPatchelfHook ];
230+ buildInputs = [ pkgs.stdenv.cc.cc.lib ];
231+ installPhase = ''
232+ mkdir -p $out/lib
233+ cp $src $out/lib/libmoq_ffi.so
234+ chmod +w $out/lib/libmoq_ffi.so
235+ '';
236+ };
237+
238+ # One directory for the loader to look in. jolt resolves every
239+ # :jolt/native name against JOLT_NATIVE_LIB, and the objects now come
240+ # from two places — jolt-native's flake, and the moq-ffi release — so
241+ # they are joined rather than the path being made a list, which the
242+ # loader does not take.
243+ nativeAll = pkgs.symlinkJoin {
244+ name = "frq-native";
245+ paths = [ native moqFfi ];
246+ };
247+
185 # Jolt itself: Clojure on Chez, built the way its own flake builds it.248 # Jolt itself: Clojure on Chez, built the way its own flake builds it.
186 # A function, because there are two of them — upstream for the249 # A function, because there are two of them — upstream for the
187 # desktop, and the Bionic-addrinfo fork for the boot image the APK250 # desktop, and the Bionic-addrinfo fork for the boot image the APK
@@ -253,7 +316,7 @@
253 # read-only directory and jolt treats that as a quiet cache miss, so316 # read-only directory and jolt treats that as a quiet cache miss, so
254 # the only cost is re-resolving the (already local) graph per start.317 # the only cost is re-resolving the (already local) graph per start.
255 frqScript = pkgs.writeShellScript "frq" ''318 frqScript = pkgs.writeShellScript "frq" ''
256- export LD_LIBRARY_PATH="${native}/lib:${lib.makeLibraryPath runtimeLibs}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"319+ export LD_LIBRARY_PATH="${nativeAll}/lib:${lib.makeLibraryPath runtimeLibs}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
257 cd ${frqSource}320 cd ${frqSource}
258 321
259 # On NixOS the store's Mesa is the system's and the window opens.322 # On NixOS the store's Mesa is the system's and the window opens.
@@ -271,7 +334,7 @@
271 # a terminal is the one surface that needs nothing from the host but334 # a terminal is the one surface that needs nothing from the host but
272 # a terminal, which is the reason this output exists.335 # a terminal, which is the reason this output exists.
273 tuiScript = pkgs.writeShellScript "frq-tui" ''336 tuiScript = pkgs.writeShellScript "frq-tui" ''
274- export LD_LIBRARY_PATH="${native}/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"337+ export LD_LIBRARY_PATH="${nativeAll}/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
275 cd ${frqSource}338 cd ${frqSource}
276 339
277 exec ${joltRuntime}/bin/jolt \340 exec ${joltRuntime}/bin/jolt \
@@ -334,7 +397,7 @@
334 };397 };
335 in398 in
336 {399 {
337- inherit native frq;400+ inherit native moqFfi nativeAll frq;
338 inherit tui;401 inherit tui;
339 jolt = joltRuntime;402 jolt = joltRuntime;
340 default = frq;403 default = frq;
@@ -380,7 +443,7 @@
380 devShells = forEachSystem (pkgs:443 devShells = forEachSystem (pkgs:
381 let444 let
382 inherit (pkgs) lib;445 inherit (pkgs) lib;
383- inherit (self.packages.${pkgs.stdenv.hostPlatform.system}) jolt native;446+ inherit (self.packages.${pkgs.stdenv.hostPlatform.system}) jolt native nativeAll;
384 in447 in
385 {448 {
386 default = pkgs.mkShellNoCC {449 default = pkgs.mkShellNoCC {
@@ -397,7 +460,7 @@
397 # source `just run` runs is the working tree, so the launcher has460 # source `just run` runs is the working tree, so the launcher has
398 # to live in that tree and the shell has to hand it its answers.461 # to live in that tree and the shell has to hand it its answers.
399 # Naming these is also what makes the shell build them.462 # Naming these is also what makes the shell build them.
400- JOLT_NATIVE_LIB = "${native}/lib";463+ JOLT_NATIVE_LIB = "${nativeAll}/lib";
401 GLIMMER_SRC = glimmer;464 GLIMMER_SRC = glimmer;
402 GLIMMER_VIDYA_SRC = "${jolt-native}/glimmer-backends/glimmer-vidya";465 GLIMMER_VIDYA_SRC = "${jolt-native}/glimmer-backends/glimmer-vidya";
403 GLIMMER_TUI_SRC = "${jolt-native}/glimmer-backends/glimmer-tui";466 GLIMMER_TUI_SRC = "${jolt-native}/glimmer-backends/glimmer-tui";
modified justfile +45 -0
@@ -209,3 +209,48 @@ repl *args:
209209 export LD_LIBRARY_PATH="$JOLT_NATIVE_LIB:$FRQ_LIB_PATH${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
210210
211211 exec jolt -Sdeps "$deps" "$@"
212+
213+# Regenerate src/frq/moq/raw.clj from the libmoq_ffi we actually load.
214+#
215+# UniFFI embeds its interface metadata in the object, so `uniffi-bindgen
216+# --library` reads the truth out of the .so rather than a header shipped
217+# beside it — which for this release is a different build entirely (the Apple
218+# artifact has moq-ffi's `audio` and `video` features, Linux and Android do
219+# not). Binding the header would link on a Mac and fail on both platforms frq
220+# ships to, so the object is the only source this recipe will accept.
221+#
222+# The bindgen must match the uniffi that built the object — 0.32 for moq-ffi
223+# 0.3.17 — and it is built once into the scratch dir rather than pinned into
224+# the flake: nothing in a normal build needs it, and a regeneration is a thing
225+# done when the moq-ffi pin moves, by hand, on purpose.
226+#
227+# just gen-moq # the loaded library
228+# just gen-moq path/to/libmoq_ffi.so
229+#
230+# Regenerate the libmoq_ffi bindings from the object's own embedded metadata.
231+gen-moq lib="":
232+ #!/usr/bin/env bash
233+ set -euo pipefail
234+ lib="${1:-${JOLT_NATIVE_LIB:-}/libmoq_ffi.so}"
235+ [ -f "$lib" ] || { echo "no libmoq_ffi.so at $lib — pass one: just gen-moq <path>" >&2; exit 1; }
236+ work="${TMPDIR:-/tmp}/frq-gen-moq"
237+ mkdir -p "$work/ubg/src"
238+ cat > "$work/ubg/Cargo.toml" <<'TOML'
239+ [package]
240+ name = "ubg"
241+ version = "0.1.0"
242+ edition = "2021"
243+ [[bin]]
244+ name = "uniffi-bindgen"
245+ path = "src/main.rs"
246+ [dependencies]
247+ uniffi = { version = "0.32", features = ["cli"] }
248+ TOML
249+ echo 'fn main() { uniffi::uniffi_bindgen_main() }' > "$work/ubg/src/main.rs"
250+ ( cd "$work/ubg" && cargo build --release -q )
251+ ( cd "$work/ubg" && ./target/release/uniffi-bindgen generate \
252+ --library "$lib" --language python --out-dir "$work/py" --no-format )
253+ python3 tools/py2jolt.py "$work"/py/*.py > "$work/body.clj"
254+ { sed -n '1,/^ (:require \[jolt.ffi :as ffi\]))$/p' src/frq/moq/raw.clj; echo; cat "$work/body.clj"; } > "$work/raw.clj"
255+ mv "$work/raw.clj" src/frq/moq/raw.clj
256+ echo "wrote src/frq/moq/raw.clj ($(grep -c '^(ffi/defcfn' src/frq/moq/raw.clj) entry points)"
@@ -209,3 +209,48 @@ repl *args:
209 export LD_LIBRARY_PATH="$JOLT_NATIVE_LIB:$FRQ_LIB_PATH${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"209 export LD_LIBRARY_PATH="$JOLT_NATIVE_LIB:$FRQ_LIB_PATH${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
210 210
211 exec jolt -Sdeps "$deps" "$@"211 exec jolt -Sdeps "$deps" "$@"
212+
213+# Regenerate src/frq/moq/raw.clj from the libmoq_ffi we actually load.
214+#
215+# UniFFI embeds its interface metadata in the object, so `uniffi-bindgen
216+# --library` reads the truth out of the .so rather than a header shipped
217+# beside it — which for this release is a different build entirely (the Apple
218+# artifact has moq-ffi's `audio` and `video` features, Linux and Android do
219+# not). Binding the header would link on a Mac and fail on both platforms frq
220+# ships to, so the object is the only source this recipe will accept.
221+#
222+# The bindgen must match the uniffi that built the object — 0.32 for moq-ffi
223+# 0.3.17 — and it is built once into the scratch dir rather than pinned into
224+# the flake: nothing in a normal build needs it, and a regeneration is a thing
225+# done when the moq-ffi pin moves, by hand, on purpose.
226+#
227+# just gen-moq # the loaded library
228+# just gen-moq path/to/libmoq_ffi.so
229+#
230+# Regenerate the libmoq_ffi bindings from the object's own embedded metadata.
231+gen-moq lib="":
232+ #!/usr/bin/env bash
233+ set -euo pipefail
234+ lib="${1:-${JOLT_NATIVE_LIB:-}/libmoq_ffi.so}"
235+ [ -f "$lib" ] || { echo "no libmoq_ffi.so at $lib — pass one: just gen-moq <path>" >&2; exit 1; }
236+ work="${TMPDIR:-/tmp}/frq-gen-moq"
237+ mkdir -p "$work/ubg/src"
238+ cat > "$work/ubg/Cargo.toml" <<'TOML'
239+ [package]
240+ name = "ubg"
241+ version = "0.1.0"
242+ edition = "2021"
243+ [[bin]]
244+ name = "uniffi-bindgen"
245+ path = "src/main.rs"
246+ [dependencies]
247+ uniffi = { version = "0.32", features = ["cli"] }
248+ TOML
249+ echo 'fn main() { uniffi::uniffi_bindgen_main() }' > "$work/ubg/src/main.rs"
250+ ( cd "$work/ubg" && cargo build --release -q )
251+ ( cd "$work/ubg" && ./target/release/uniffi-bindgen generate \
252+ --library "$lib" --language python --out-dir "$work/py" --no-format )
253+ python3 tools/py2jolt.py "$work"/py/*.py > "$work/body.clj"
254+ { sed -n '1,/^ (:require \[jolt.ffi :as ffi\]))$/p' src/frq/moq/raw.clj; echo; cat "$work/body.clj"; } > "$work/raw.clj"
255+ mv "$work/raw.clj" src/frq/moq/raw.clj
256+ echo "wrote src/frq/moq/raw.clj ($(grep -c '^(ffi/defcfn' src/frq/moq/raw.clj) entry points)"
added src/frq/moq/raw.clj +439 -0
new file mode 100644
@@ -0,0 +1,439 @@
1+(ns frq.moq.raw
2+ "Every entry point in libmoq_ffi, declared. GENERATED — do not edit.
3+
4+ just gen-moq
5+
6+ These are not transcribed from a header. UniFFI embeds its interface
7+ metadata in the object itself, and `uniffi-bindgen --library` reads it back
8+ out, so what is declared here is what the .so we ship actually exports —
9+ which matters more than it sounds. The release's Apple artifact and its
10+ Linux/Android ones are *different builds*: moq-ffi's `audio` and `video`
11+ features are on by default and were switched off for Linux and Android, so
12+ the shipped C header describes 230 entry points where the object we load has
13+ 403 symbols covering 206 functions, with `publish_audio`, `publish_video`
14+ and the whole `moqaudio*`/`moqvideo*` surface absent. Binding the header
15+ would have produced calls that link on a Mac and fail on the two platforms
16+ frq targets.
17+
18+ Nothing here is hand-written and nothing is inferred. The generator maps a
19+ ctype it does not recognise to nothing at all and reports it, rather than
20+ guessing a width — a wrong one would be a silent memory bug rather than a
21+ compile error.
22+
23+ Two shapes recur, and both are spelled out in full at every call site rather
24+ than named: `defcfn` is a macro whose types Chez fixes when it COMPILES the
25+ foreign procedure, so a `def`'d descriptor in type position has nothing to
26+ compile. Hence the literal [:by-value [:struct ...]] repeated throughout —
27+ it is the RustBuffer {capacity, len, data} triple, or the ForeignBytes pair.
28+
29+ A trailing :pointer on a non-async function is its `RustCallStatus *`
30+ out-parameter; `frq.moq.uniffi/with-out-status` is what supplies one. An
31+ async function has no status and answers a future handle instead — poll it
32+ through `frq.moq.uniffi/start-future`.
33+
34+ Generated from moq-ffi 0.3.17, UniFFI contract 30."
35+ (:require [jolt.ffi :as ffi]))
36+
37+(ffi/defcfn rust-future-cancel-f32 "ffi_moq_ffi_rust_future_cancel_f32" [:uint64] :void)
38+(ffi/defcfn rust-future-cancel-f64 "ffi_moq_ffi_rust_future_cancel_f64" [:uint64] :void)
39+(ffi/defcfn rust-future-cancel-i16 "ffi_moq_ffi_rust_future_cancel_i16" [:uint64] :void)
40+(ffi/defcfn rust-future-cancel-i32 "ffi_moq_ffi_rust_future_cancel_i32" [:uint64] :void)
41+(ffi/defcfn rust-future-cancel-i64 "ffi_moq_ffi_rust_future_cancel_i64" [:uint64] :void)
42+(ffi/defcfn rust-future-cancel-i8 "ffi_moq_ffi_rust_future_cancel_i8" [:uint64] :void)
43+(ffi/defcfn rust-future-cancel-rust-buffer "ffi_moq_ffi_rust_future_cancel_rust_buffer" [:uint64] :void)
44+(ffi/defcfn rust-future-cancel-u16 "ffi_moq_ffi_rust_future_cancel_u16" [:uint64] :void)
45+(ffi/defcfn rust-future-cancel-u32 "ffi_moq_ffi_rust_future_cancel_u32" [:uint64] :void)
46+(ffi/defcfn rust-future-cancel-u64 "ffi_moq_ffi_rust_future_cancel_u64" [:uint64] :void)
47+(ffi/defcfn rust-future-cancel-u8 "ffi_moq_ffi_rust_future_cancel_u8" [:uint64] :void)
48+(ffi/defcfn rust-future-cancel-void "ffi_moq_ffi_rust_future_cancel_void" [:uint64] :void)
49+(ffi/defcfn rust-future-complete-f32 "ffi_moq_ffi_rust_future_complete_f32" [:uint64 :pointer] :float)
50+(ffi/defcfn rust-future-complete-f64 "ffi_moq_ffi_rust_future_complete_f64" [:uint64 :pointer] :double)
51+(ffi/defcfn rust-future-complete-i16 "ffi_moq_ffi_rust_future_complete_i16" [:uint64 :pointer] :int16)
52+(ffi/defcfn rust-future-complete-i32 "ffi_moq_ffi_rust_future_complete_i32" [:uint64 :pointer] :int32)
53+(ffi/defcfn rust-future-complete-i64 "ffi_moq_ffi_rust_future_complete_i64" [:uint64 :pointer] :int64)
54+(ffi/defcfn rust-future-complete-i8 "ffi_moq_ffi_rust_future_complete_i8" [:uint64 :pointer] :int8)
55+(ffi/defcfn rust-future-complete-rust-buffer "ffi_moq_ffi_rust_future_complete_rust_buffer" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
56+(ffi/defcfn rust-future-complete-u16 "ffi_moq_ffi_rust_future_complete_u16" [:uint64 :pointer] :uint16)
57+(ffi/defcfn rust-future-complete-u32 "ffi_moq_ffi_rust_future_complete_u32" [:uint64 :pointer] :uint32)
58+(ffi/defcfn rust-future-complete-u64 "ffi_moq_ffi_rust_future_complete_u64" [:uint64 :pointer] :uint64)
59+(ffi/defcfn rust-future-complete-u8 "ffi_moq_ffi_rust_future_complete_u8" [:uint64 :pointer] :uint8)
60+(ffi/defcfn rust-future-complete-void "ffi_moq_ffi_rust_future_complete_void" [:uint64 :pointer] :void)
61+(ffi/defcfn rust-future-free-f32 "ffi_moq_ffi_rust_future_free_f32" [:uint64] :void)
62+(ffi/defcfn rust-future-free-f64 "ffi_moq_ffi_rust_future_free_f64" [:uint64] :void)
63+(ffi/defcfn rust-future-free-i16 "ffi_moq_ffi_rust_future_free_i16" [:uint64] :void)
64+(ffi/defcfn rust-future-free-i32 "ffi_moq_ffi_rust_future_free_i32" [:uint64] :void)
65+(ffi/defcfn rust-future-free-i64 "ffi_moq_ffi_rust_future_free_i64" [:uint64] :void)
66+(ffi/defcfn rust-future-free-i8 "ffi_moq_ffi_rust_future_free_i8" [:uint64] :void)
67+(ffi/defcfn rust-future-free-rust-buffer "ffi_moq_ffi_rust_future_free_rust_buffer" [:uint64] :void)
68+(ffi/defcfn rust-future-free-u16 "ffi_moq_ffi_rust_future_free_u16" [:uint64] :void)
69+(ffi/defcfn rust-future-free-u32 "ffi_moq_ffi_rust_future_free_u32" [:uint64] :void)
70+(ffi/defcfn rust-future-free-u64 "ffi_moq_ffi_rust_future_free_u64" [:uint64] :void)
71+(ffi/defcfn rust-future-free-u8 "ffi_moq_ffi_rust_future_free_u8" [:uint64] :void)
72+(ffi/defcfn rust-future-free-void "ffi_moq_ffi_rust_future_free_void" [:uint64] :void)
73+(ffi/defcfn rust-future-poll-f32 "ffi_moq_ffi_rust_future_poll_f32" [:uint64 :pointer :uint64] :void)
74+(ffi/defcfn rust-future-poll-f64 "ffi_moq_ffi_rust_future_poll_f64" [:uint64 :pointer :uint64] :void)
75+(ffi/defcfn rust-future-poll-i16 "ffi_moq_ffi_rust_future_poll_i16" [:uint64 :pointer :uint64] :void)
76+(ffi/defcfn rust-future-poll-i32 "ffi_moq_ffi_rust_future_poll_i32" [:uint64 :pointer :uint64] :void)
77+(ffi/defcfn rust-future-poll-i64 "ffi_moq_ffi_rust_future_poll_i64" [:uint64 :pointer :uint64] :void)
78+(ffi/defcfn rust-future-poll-i8 "ffi_moq_ffi_rust_future_poll_i8" [:uint64 :pointer :uint64] :void)
79+(ffi/defcfn rust-future-poll-rust-buffer "ffi_moq_ffi_rust_future_poll_rust_buffer" [:uint64 :pointer :uint64] :void)
80+(ffi/defcfn rust-future-poll-u16 "ffi_moq_ffi_rust_future_poll_u16" [:uint64 :pointer :uint64] :void)
81+(ffi/defcfn rust-future-poll-u32 "ffi_moq_ffi_rust_future_poll_u32" [:uint64 :pointer :uint64] :void)
82+(ffi/defcfn rust-future-poll-u64 "ffi_moq_ffi_rust_future_poll_u64" [:uint64 :pointer :uint64] :void)
83+(ffi/defcfn rust-future-poll-u8 "ffi_moq_ffi_rust_future_poll_u8" [:uint64 :pointer :uint64] :void)
84+(ffi/defcfn rust-future-poll-void "ffi_moq_ffi_rust_future_poll_void" [:uint64 :pointer :uint64] :void)
85+(ffi/defcfn rustbuffer-alloc "ffi_moq_ffi_rustbuffer_alloc" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
86+(ffi/defcfn rustbuffer-free "ffi_moq_ffi_rustbuffer_free" [[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
87+(ffi/defcfn rustbuffer-from-bytes "ffi_moq_ffi_rustbuffer_from_bytes" [[:by-value [:struct [[:len :int32] [:data :pointer]]]] :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
88+(ffi/defcfn rustbuffer-reserve "ffi_moq_ffi_rustbuffer_reserve" [[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
89+(ffi/defcfn uniffi-contract-version "ffi_moq_ffi_uniffi_contract_version" [] :uint32)
90+(ffi/defcfn checksum-constructor-moqbroadcastproducer-new "uniffi_moq_ffi_checksum_constructor_moqbroadcastproducer_new" [] :uint16)
91+(ffi/defcfn checksum-constructor-moqclient-new "uniffi_moq_ffi_checksum_constructor_moqclient_new" [] :uint16)
92+(ffi/defcfn checksum-constructor-moqoriginproducer-new "uniffi_moq_ffi_checksum_constructor_moqoriginproducer_new" [] :uint16)
93+(ffi/defcfn checksum-constructor-moqserver-new "uniffi_moq_ffi_checksum_constructor_moqserver_new" [] :uint16)
94+(ffi/defcfn checksum-func-moq-log-level "uniffi_moq_ffi_checksum_func_moq_log_level" [] :uint16)
95+(ffi/defcfn checksum-method-moqannounced-cancel "uniffi_moq_ffi_checksum_method_moqannounced_cancel" [] :uint16)
96+(ffi/defcfn checksum-method-moqannounced-next "uniffi_moq_ffi_checksum_method_moqannounced_next" [] :uint16)
97+(ffi/defcfn checksum-method-moqannouncedbroadcast-available "uniffi_moq_ffi_checksum_method_moqannouncedbroadcast_available" [] :uint16)
98+(ffi/defcfn checksum-method-moqannouncedbroadcast-cancel "uniffi_moq_ffi_checksum_method_moqannouncedbroadcast_cancel" [] :uint16)
99+(ffi/defcfn checksum-method-moqannouncement-broadcast "uniffi_moq_ffi_checksum_method_moqannouncement_broadcast" [] :uint16)
100+(ffi/defcfn checksum-method-moqannouncement-path "uniffi_moq_ffi_checksum_method_moqannouncement_path" [] :uint16)
101+(ffi/defcfn checksum-method-moqbroadcastconsumer-fetch-group "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_fetch_group" [] :uint16)
102+(ffi/defcfn checksum-method-moqbroadcastconsumer-fetch-media-group "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_fetch_media_group" [] :uint16)
103+(ffi/defcfn checksum-method-moqbroadcastconsumer-route "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_route" [] :uint16)
104+(ffi/defcfn checksum-method-moqbroadcastconsumer-route-updates "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_route_updates" [] :uint16)
105+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-catalog "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_catalog" [] :uint16)
106+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-json-snapshot "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_json_snapshot" [] :uint16)
107+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-json-stream "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_json_stream" [] :uint16)
108+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-media "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_media" [] :uint16)
109+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-track "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_track" [] :uint16)
110+(ffi/defcfn checksum-method-moqbroadcastdynamic-cancel "uniffi_moq_ffi_checksum_method_moqbroadcastdynamic_cancel" [] :uint16)
111+(ffi/defcfn checksum-method-moqbroadcastdynamic-requested-track "uniffi_moq_ffi_checksum_method_moqbroadcastdynamic_requested_track" [] :uint16)
112+(ffi/defcfn checksum-method-moqbroadcastproducer-consume "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_consume" [] :uint16)
113+(ffi/defcfn checksum-method-moqbroadcastproducer-dynamic "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_dynamic" [] :uint16)
114+(ffi/defcfn checksum-method-moqbroadcastproducer-finish "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_finish" [] :uint16)
115+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-json-snapshot "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_json_snapshot" [] :uint16)
116+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-json-stream "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_json_stream" [] :uint16)
117+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-media "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_media" [] :uint16)
118+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-media-on-track "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_media_on_track" [] :uint16)
119+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-media-stream "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_media_stream" [] :uint16)
120+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-track "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_track" [] :uint16)
121+(ffi/defcfn checksum-method-moqbroadcastproducer-remove-catalog-section "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_remove_catalog_section" [] :uint16)
122+(ffi/defcfn checksum-method-moqbroadcastproducer-set-announce "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_set_announce" [] :uint16)
123+(ffi/defcfn checksum-method-moqbroadcastproducer-set-catalog-section "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_set_catalog_section" [] :uint16)
124+(ffi/defcfn checksum-method-moqbroadcastproducer-set-route "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_set_route" [] :uint16)
125+(ffi/defcfn checksum-method-moqbroadcastproducer-set-video-properties "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_set_video_properties" [] :uint16)
126+(ffi/defcfn checksum-method-moqbroadcastrequest-abort "uniffi_moq_ffi_checksum_method_moqbroadcastrequest_abort" [] :uint16)
127+(ffi/defcfn checksum-method-moqbroadcastrequest-accept "uniffi_moq_ffi_checksum_method_moqbroadcastrequest_accept" [] :uint16)
128+(ffi/defcfn checksum-method-moqbroadcastrequest-path "uniffi_moq_ffi_checksum_method_moqbroadcastrequest_path" [] :uint16)
129+(ffi/defcfn checksum-method-moqcatalogconsumer-cancel "uniffi_moq_ffi_checksum_method_moqcatalogconsumer_cancel" [] :uint16)
130+(ffi/defcfn checksum-method-moqcatalogconsumer-next "uniffi_moq_ffi_checksum_method_moqcatalogconsumer_next" [] :uint16)
131+(ffi/defcfn checksum-method-moqclient-cancel "uniffi_moq_ffi_checksum_method_moqclient_cancel" [] :uint16)
132+(ffi/defcfn checksum-method-moqclient-connect "uniffi_moq_ffi_checksum_method_moqclient_connect" [] :uint16)
133+(ffi/defcfn checksum-method-moqclient-set-bind "uniffi_moq_ffi_checksum_method_moqclient_set_bind" [] :uint16)
134+(ffi/defcfn checksum-method-moqclient-set-consume "uniffi_moq_ffi_checksum_method_moqclient_set_consume" [] :uint16)
135+(ffi/defcfn checksum-method-moqclient-set-publish "uniffi_moq_ffi_checksum_method_moqclient_set_publish" [] :uint16)
136+(ffi/defcfn checksum-method-moqclient-set-tls-cert "uniffi_moq_ffi_checksum_method_moqclient_set_tls_cert" [] :uint16)
137+(ffi/defcfn checksum-method-moqclient-set-tls-disable-verify "uniffi_moq_ffi_checksum_method_moqclient_set_tls_disable_verify" [] :uint16)
138+(ffi/defcfn checksum-method-moqclient-set-tls-fingerprints "uniffi_moq_ffi_checksum_method_moqclient_set_tls_fingerprints" [] :uint16)
139+(ffi/defcfn checksum-method-moqclient-set-tls-key "uniffi_moq_ffi_checksum_method_moqclient_set_tls_key" [] :uint16)
140+(ffi/defcfn checksum-method-moqclient-set-tls-roots "uniffi_moq_ffi_checksum_method_moqclient_set_tls_roots" [] :uint16)
141+(ffi/defcfn checksum-method-moqclient-set-tls-system-roots "uniffi_moq_ffi_checksum_method_moqclient_set_tls_system_roots" [] :uint16)
142+(ffi/defcfn checksum-method-moqgroupconsumer-cancel "uniffi_moq_ffi_checksum_method_moqgroupconsumer_cancel" [] :uint16)
143+(ffi/defcfn checksum-method-moqgroupconsumer-read-frame "uniffi_moq_ffi_checksum_method_moqgroupconsumer_read_frame" [] :uint16)
144+(ffi/defcfn checksum-method-moqgroupconsumer-sequence "uniffi_moq_ffi_checksum_method_moqgroupconsumer_sequence" [] :uint16)
145+(ffi/defcfn checksum-method-moqgroupproducer-abort "uniffi_moq_ffi_checksum_method_moqgroupproducer_abort" [] :uint16)
146+(ffi/defcfn checksum-method-moqgroupproducer-consume "uniffi_moq_ffi_checksum_method_moqgroupproducer_consume" [] :uint16)
147+(ffi/defcfn checksum-method-moqgroupproducer-finish "uniffi_moq_ffi_checksum_method_moqgroupproducer_finish" [] :uint16)
148+(ffi/defcfn checksum-method-moqgroupproducer-sequence "uniffi_moq_ffi_checksum_method_moqgroupproducer_sequence" [] :uint16)
149+(ffi/defcfn checksum-method-moqgroupproducer-write-frame "uniffi_moq_ffi_checksum_method_moqgroupproducer_write_frame" [] :uint16)
150+(ffi/defcfn checksum-method-moqgrouprequest-abort "uniffi_moq_ffi_checksum_method_moqgrouprequest_abort" [] :uint16)
151+(ffi/defcfn checksum-method-moqgrouprequest-accept "uniffi_moq_ffi_checksum_method_moqgrouprequest_accept" [] :uint16)
152+(ffi/defcfn checksum-method-moqgrouprequest-priority "uniffi_moq_ffi_checksum_method_moqgrouprequest_priority" [] :uint16)
153+(ffi/defcfn checksum-method-moqgrouprequest-sequence "uniffi_moq_ffi_checksum_method_moqgrouprequest_sequence" [] :uint16)
154+(ffi/defcfn checksum-method-moqjsonsnapshotconsumer-cancel "uniffi_moq_ffi_checksum_method_moqjsonsnapshotconsumer_cancel" [] :uint16)
155+(ffi/defcfn checksum-method-moqjsonsnapshotconsumer-next "uniffi_moq_ffi_checksum_method_moqjsonsnapshotconsumer_next" [] :uint16)
156+(ffi/defcfn checksum-method-moqjsonsnapshotproducer-finish "uniffi_moq_ffi_checksum_method_moqjsonsnapshotproducer_finish" [] :uint16)
157+(ffi/defcfn checksum-method-moqjsonsnapshotproducer-update "uniffi_moq_ffi_checksum_method_moqjsonsnapshotproducer_update" [] :uint16)
158+(ffi/defcfn checksum-method-moqjsonstreamconsumer-cancel "uniffi_moq_ffi_checksum_method_moqjsonstreamconsumer_cancel" [] :uint16)
159+(ffi/defcfn checksum-method-moqjsonstreamconsumer-next "uniffi_moq_ffi_checksum_method_moqjsonstreamconsumer_next" [] :uint16)
160+(ffi/defcfn checksum-method-moqjsonstreamproducer-append "uniffi_moq_ffi_checksum_method_moqjsonstreamproducer_append" [] :uint16)
161+(ffi/defcfn checksum-method-moqjsonstreamproducer-finish "uniffi_moq_ffi_checksum_method_moqjsonstreamproducer_finish" [] :uint16)
162+(ffi/defcfn checksum-method-moqmediaconsumer-cancel "uniffi_moq_ffi_checksum_method_moqmediaconsumer_cancel" [] :uint16)
163+(ffi/defcfn checksum-method-moqmediaconsumer-next "uniffi_moq_ffi_checksum_method_moqmediaconsumer_next" [] :uint16)
164+(ffi/defcfn checksum-method-moqmediagroupconsumer-cancel "uniffi_moq_ffi_checksum_method_moqmediagroupconsumer_cancel" [] :uint16)
165+(ffi/defcfn checksum-method-moqmediagroupconsumer-next "uniffi_moq_ffi_checksum_method_moqmediagroupconsumer_next" [] :uint16)
166+(ffi/defcfn checksum-method-moqmediagroupconsumer-sequence "uniffi_moq_ffi_checksum_method_moqmediagroupconsumer_sequence" [] :uint16)
167+(ffi/defcfn checksum-method-moqmediaproducer-finish "uniffi_moq_ffi_checksum_method_moqmediaproducer_finish" [] :uint16)
168+(ffi/defcfn checksum-method-moqmediaproducer-name "uniffi_moq_ffi_checksum_method_moqmediaproducer_name" [] :uint16)
169+(ffi/defcfn checksum-method-moqmediaproducer-unused "uniffi_moq_ffi_checksum_method_moqmediaproducer_unused" [] :uint16)
170+(ffi/defcfn checksum-method-moqmediaproducer-used "uniffi_moq_ffi_checksum_method_moqmediaproducer_used" [] :uint16)
171+(ffi/defcfn checksum-method-moqmediaproducer-write-frame "uniffi_moq_ffi_checksum_method_moqmediaproducer_write_frame" [] :uint16)
172+(ffi/defcfn checksum-method-moqmediastreamproducer-finish "uniffi_moq_ffi_checksum_method_moqmediastreamproducer_finish" [] :uint16)
173+(ffi/defcfn checksum-method-moqmediastreamproducer-write "uniffi_moq_ffi_checksum_method_moqmediastreamproducer_write" [] :uint16)
174+(ffi/defcfn checksum-method-moqoriginconsumer-announced "uniffi_moq_ffi_checksum_method_moqoriginconsumer_announced" [] :uint16)
175+(ffi/defcfn checksum-method-moqoriginconsumer-announced-broadcast "uniffi_moq_ffi_checksum_method_moqoriginconsumer_announced_broadcast" [] :uint16)
176+(ffi/defcfn checksum-method-moqoriginconsumer-request-broadcast "uniffi_moq_ffi_checksum_method_moqoriginconsumer_request_broadcast" [] :uint16)
177+(ffi/defcfn checksum-method-moqorigindynamic-cancel "uniffi_moq_ffi_checksum_method_moqorigindynamic_cancel" [] :uint16)
178+(ffi/defcfn checksum-method-moqorigindynamic-requested-broadcast "uniffi_moq_ffi_checksum_method_moqorigindynamic_requested_broadcast" [] :uint16)
179+(ffi/defcfn checksum-method-moqoriginproducer-consume "uniffi_moq_ffi_checksum_method_moqoriginproducer_consume" [] :uint16)
180+(ffi/defcfn checksum-method-moqoriginproducer-create-broadcast "uniffi_moq_ffi_checksum_method_moqoriginproducer_create_broadcast" [] :uint16)
181+(ffi/defcfn checksum-method-moqoriginproducer-dynamic "uniffi_moq_ffi_checksum_method_moqoriginproducer_dynamic" [] :uint16)
182+(ffi/defcfn checksum-method-moqrequest-accept "uniffi_moq_ffi_checksum_method_moqrequest_accept" [] :uint16)
183+(ffi/defcfn checksum-method-moqrequest-cancel "uniffi_moq_ffi_checksum_method_moqrequest_cancel" [] :uint16)
184+(ffi/defcfn checksum-method-moqrequest-path "uniffi_moq_ffi_checksum_method_moqrequest_path" [] :uint16)
185+(ffi/defcfn checksum-method-moqrequest-query "uniffi_moq_ffi_checksum_method_moqrequest_query" [] :uint16)
186+(ffi/defcfn checksum-method-moqrequest-reject "uniffi_moq_ffi_checksum_method_moqrequest_reject" [] :uint16)
187+(ffi/defcfn checksum-method-moqrequest-set-consume "uniffi_moq_ffi_checksum_method_moqrequest_set_consume" [] :uint16)
188+(ffi/defcfn checksum-method-moqrequest-set-publish "uniffi_moq_ffi_checksum_method_moqrequest_set_publish" [] :uint16)
189+(ffi/defcfn checksum-method-moqrequest-transport "uniffi_moq_ffi_checksum_method_moqrequest_transport" [] :uint16)
190+(ffi/defcfn checksum-method-moqrequest-url "uniffi_moq_ffi_checksum_method_moqrequest_url" [] :uint16)
191+(ffi/defcfn checksum-method-moqroutewatch-cancel "uniffi_moq_ffi_checksum_method_moqroutewatch_cancel" [] :uint16)
192+(ffi/defcfn checksum-method-moqroutewatch-next "uniffi_moq_ffi_checksum_method_moqroutewatch_next" [] :uint16)
193+(ffi/defcfn checksum-method-moqserver-accept "uniffi_moq_ffi_checksum_method_moqserver_accept" [] :uint16)
194+(ffi/defcfn checksum-method-moqserver-cancel "uniffi_moq_ffi_checksum_method_moqserver_cancel" [] :uint16)
195+(ffi/defcfn checksum-method-moqserver-cert-fingerprints "uniffi_moq_ffi_checksum_method_moqserver_cert_fingerprints" [] :uint16)
196+(ffi/defcfn checksum-method-moqserver-listen "uniffi_moq_ffi_checksum_method_moqserver_listen" [] :uint16)
197+(ffi/defcfn checksum-method-moqserver-set-bind "uniffi_moq_ffi_checksum_method_moqserver_set_bind" [] :uint16)
198+(ffi/defcfn checksum-method-moqserver-set-consume "uniffi_moq_ffi_checksum_method_moqserver_set_consume" [] :uint16)
199+(ffi/defcfn checksum-method-moqserver-set-publish "uniffi_moq_ffi_checksum_method_moqserver_set_publish" [] :uint16)
200+(ffi/defcfn checksum-method-moqserver-set-tls-cert "uniffi_moq_ffi_checksum_method_moqserver_set_tls_cert" [] :uint16)
201+(ffi/defcfn checksum-method-moqserver-set-tls-generate "uniffi_moq_ffi_checksum_method_moqserver_set_tls_generate" [] :uint16)
202+(ffi/defcfn checksum-method-moqserver-set-tls-key "uniffi_moq_ffi_checksum_method_moqserver_set_tls_key" [] :uint16)
203+(ffi/defcfn checksum-method-moqsession-cancel "uniffi_moq_ffi_checksum_method_moqsession_cancel" [] :uint16)
204+(ffi/defcfn checksum-method-moqsession-closed "uniffi_moq_ffi_checksum_method_moqsession_closed" [] :uint16)
205+(ffi/defcfn checksum-method-moqsession-consumer "uniffi_moq_ffi_checksum_method_moqsession_consumer" [] :uint16)
206+(ffi/defcfn checksum-method-moqsession-publisher "uniffi_moq_ffi_checksum_method_moqsession_publisher" [] :uint16)
207+(ffi/defcfn checksum-method-moqsession-shutdown "uniffi_moq_ffi_checksum_method_moqsession_shutdown" [] :uint16)
208+(ffi/defcfn checksum-method-moqsession-stats "uniffi_moq_ffi_checksum_method_moqsession_stats" [] :uint16)
209+(ffi/defcfn checksum-method-moqtrackconsumer-cancel "uniffi_moq_ffi_checksum_method_moqtrackconsumer_cancel" [] :uint16)
210+(ffi/defcfn checksum-method-moqtrackconsumer-info "uniffi_moq_ffi_checksum_method_moqtrackconsumer_info" [] :uint16)
211+(ffi/defcfn checksum-method-moqtrackconsumer-next-group "uniffi_moq_ffi_checksum_method_moqtrackconsumer_next_group" [] :uint16)
212+(ffi/defcfn checksum-method-moqtrackconsumer-read-frame "uniffi_moq_ffi_checksum_method_moqtrackconsumer_read_frame" [] :uint16)
213+(ffi/defcfn checksum-method-moqtrackconsumer-recv-datagram "uniffi_moq_ffi_checksum_method_moqtrackconsumer_recv_datagram" [] :uint16)
214+(ffi/defcfn checksum-method-moqtrackconsumer-recv-group "uniffi_moq_ffi_checksum_method_moqtrackconsumer_recv_group" [] :uint16)
215+(ffi/defcfn checksum-method-moqtrackconsumer-update "uniffi_moq_ffi_checksum_method_moqtrackconsumer_update" [] :uint16)
216+(ffi/defcfn checksum-method-moqtrackdynamic-cancel "uniffi_moq_ffi_checksum_method_moqtrackdynamic_cancel" [] :uint16)
217+(ffi/defcfn checksum-method-moqtrackdynamic-requested-group "uniffi_moq_ffi_checksum_method_moqtrackdynamic_requested_group" [] :uint16)
218+(ffi/defcfn checksum-method-moqtrackproducer-abort "uniffi_moq_ffi_checksum_method_moqtrackproducer_abort" [] :uint16)
219+(ffi/defcfn checksum-method-moqtrackproducer-append-datagram "uniffi_moq_ffi_checksum_method_moqtrackproducer_append_datagram" [] :uint16)
220+(ffi/defcfn checksum-method-moqtrackproducer-append-group "uniffi_moq_ffi_checksum_method_moqtrackproducer_append_group" [] :uint16)
221+(ffi/defcfn checksum-method-moqtrackproducer-consume "uniffi_moq_ffi_checksum_method_moqtrackproducer_consume" [] :uint16)
222+(ffi/defcfn checksum-method-moqtrackproducer-create-group "uniffi_moq_ffi_checksum_method_moqtrackproducer_create_group" [] :uint16)
223+(ffi/defcfn checksum-method-moqtrackproducer-dynamic "uniffi_moq_ffi_checksum_method_moqtrackproducer_dynamic" [] :uint16)
224+(ffi/defcfn checksum-method-moqtrackproducer-finish "uniffi_moq_ffi_checksum_method_moqtrackproducer_finish" [] :uint16)
225+(ffi/defcfn checksum-method-moqtrackproducer-finish-at "uniffi_moq_ffi_checksum_method_moqtrackproducer_finish_at" [] :uint16)
226+(ffi/defcfn checksum-method-moqtrackproducer-name "uniffi_moq_ffi_checksum_method_moqtrackproducer_name" [] :uint16)
227+(ffi/defcfn checksum-method-moqtrackproducer-unused "uniffi_moq_ffi_checksum_method_moqtrackproducer_unused" [] :uint16)
228+(ffi/defcfn checksum-method-moqtrackproducer-used "uniffi_moq_ffi_checksum_method_moqtrackproducer_used" [] :uint16)
229+(ffi/defcfn checksum-method-moqtrackproducer-write-frame "uniffi_moq_ffi_checksum_method_moqtrackproducer_write_frame" [] :uint16)
230+(ffi/defcfn checksum-method-moqtrackrequest-abort "uniffi_moq_ffi_checksum_method_moqtrackrequest_abort" [] :uint16)
231+(ffi/defcfn checksum-method-moqtrackrequest-accept "uniffi_moq_ffi_checksum_method_moqtrackrequest_accept" [] :uint16)
232+(ffi/defcfn checksum-method-moqtrackrequest-dynamic "uniffi_moq_ffi_checksum_method_moqtrackrequest_dynamic" [] :uint16)
233+(ffi/defcfn checksum-method-moqtrackrequest-name "uniffi_moq_ffi_checksum_method_moqtrackrequest_name" [] :uint16)
234+(ffi/defcfn clone-moqannounced "uniffi_moq_ffi_fn_clone_moqannounced" [:uint64 :pointer] :uint64)
235+(ffi/defcfn clone-moqannouncedbroadcast "uniffi_moq_ffi_fn_clone_moqannouncedbroadcast" [:uint64 :pointer] :uint64)
236+(ffi/defcfn clone-moqannouncement "uniffi_moq_ffi_fn_clone_moqannouncement" [:uint64 :pointer] :uint64)
237+(ffi/defcfn clone-moqbroadcastconsumer "uniffi_moq_ffi_fn_clone_moqbroadcastconsumer" [:uint64 :pointer] :uint64)
238+(ffi/defcfn clone-moqbroadcastdynamic "uniffi_moq_ffi_fn_clone_moqbroadcastdynamic" [:uint64 :pointer] :uint64)
239+(ffi/defcfn clone-moqbroadcastproducer "uniffi_moq_ffi_fn_clone_moqbroadcastproducer" [:uint64 :pointer] :uint64)
240+(ffi/defcfn clone-moqbroadcastrequest "uniffi_moq_ffi_fn_clone_moqbroadcastrequest" [:uint64 :pointer] :uint64)
241+(ffi/defcfn clone-moqcatalogconsumer "uniffi_moq_ffi_fn_clone_moqcatalogconsumer" [:uint64 :pointer] :uint64)
242+(ffi/defcfn clone-moqclient "uniffi_moq_ffi_fn_clone_moqclient" [:uint64 :pointer] :uint64)
243+(ffi/defcfn clone-moqgroupconsumer "uniffi_moq_ffi_fn_clone_moqgroupconsumer" [:uint64 :pointer] :uint64)
244+(ffi/defcfn clone-moqgroupproducer "uniffi_moq_ffi_fn_clone_moqgroupproducer" [:uint64 :pointer] :uint64)
245+(ffi/defcfn clone-moqgrouprequest "uniffi_moq_ffi_fn_clone_moqgrouprequest" [:uint64 :pointer] :uint64)
246+(ffi/defcfn clone-moqjsonsnapshotconsumer "uniffi_moq_ffi_fn_clone_moqjsonsnapshotconsumer" [:uint64 :pointer] :uint64)
247+(ffi/defcfn clone-moqjsonsnapshotproducer "uniffi_moq_ffi_fn_clone_moqjsonsnapshotproducer" [:uint64 :pointer] :uint64)
248+(ffi/defcfn clone-moqjsonstreamconsumer "uniffi_moq_ffi_fn_clone_moqjsonstreamconsumer" [:uint64 :pointer] :uint64)
249+(ffi/defcfn clone-moqjsonstreamproducer "uniffi_moq_ffi_fn_clone_moqjsonstreamproducer" [:uint64 :pointer] :uint64)
250+(ffi/defcfn clone-moqmediaconsumer "uniffi_moq_ffi_fn_clone_moqmediaconsumer" [:uint64 :pointer] :uint64)
251+(ffi/defcfn clone-moqmediagroupconsumer "uniffi_moq_ffi_fn_clone_moqmediagroupconsumer" [:uint64 :pointer] :uint64)
252+(ffi/defcfn clone-moqmediaproducer "uniffi_moq_ffi_fn_clone_moqmediaproducer" [:uint64 :pointer] :uint64)
253+(ffi/defcfn clone-moqmediastreamproducer "uniffi_moq_ffi_fn_clone_moqmediastreamproducer" [:uint64 :pointer] :uint64)
254+(ffi/defcfn clone-moqoriginconsumer "uniffi_moq_ffi_fn_clone_moqoriginconsumer" [:uint64 :pointer] :uint64)
255+(ffi/defcfn clone-moqorigindynamic "uniffi_moq_ffi_fn_clone_moqorigindynamic" [:uint64 :pointer] :uint64)
256+(ffi/defcfn clone-moqoriginproducer "uniffi_moq_ffi_fn_clone_moqoriginproducer" [:uint64 :pointer] :uint64)
257+(ffi/defcfn clone-moqrequest "uniffi_moq_ffi_fn_clone_moqrequest" [:uint64 :pointer] :uint64)
258+(ffi/defcfn clone-moqroutewatch "uniffi_moq_ffi_fn_clone_moqroutewatch" [:uint64 :pointer] :uint64)
259+(ffi/defcfn clone-moqserver "uniffi_moq_ffi_fn_clone_moqserver" [:uint64 :pointer] :uint64)
260+(ffi/defcfn clone-moqsession "uniffi_moq_ffi_fn_clone_moqsession" [:uint64 :pointer] :uint64)
261+(ffi/defcfn clone-moqtrackconsumer "uniffi_moq_ffi_fn_clone_moqtrackconsumer" [:uint64 :pointer] :uint64)
262+(ffi/defcfn clone-moqtrackdynamic "uniffi_moq_ffi_fn_clone_moqtrackdynamic" [:uint64 :pointer] :uint64)
263+(ffi/defcfn clone-moqtrackproducer "uniffi_moq_ffi_fn_clone_moqtrackproducer" [:uint64 :pointer] :uint64)
264+(ffi/defcfn clone-moqtrackrequest "uniffi_moq_ffi_fn_clone_moqtrackrequest" [:uint64 :pointer] :uint64)
265+(ffi/defcfn constructor-moqbroadcastproducer-new "uniffi_moq_ffi_fn_constructor_moqbroadcastproducer_new" [:pointer] :uint64)
266+(ffi/defcfn constructor-moqclient-new "uniffi_moq_ffi_fn_constructor_moqclient_new" [:pointer] :uint64)
267+(ffi/defcfn constructor-moqoriginproducer-new "uniffi_moq_ffi_fn_constructor_moqoriginproducer_new" [[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
268+(ffi/defcfn constructor-moqserver-new "uniffi_moq_ffi_fn_constructor_moqserver_new" [:pointer] :uint64)
269+(ffi/defcfn free-moqannounced "uniffi_moq_ffi_fn_free_moqannounced" [:uint64 :pointer] :void)
270+(ffi/defcfn free-moqannouncedbroadcast "uniffi_moq_ffi_fn_free_moqannouncedbroadcast" [:uint64 :pointer] :void)
271+(ffi/defcfn free-moqannouncement "uniffi_moq_ffi_fn_free_moqannouncement" [:uint64 :pointer] :void)
272+(ffi/defcfn free-moqbroadcastconsumer "uniffi_moq_ffi_fn_free_moqbroadcastconsumer" [:uint64 :pointer] :void)
273+(ffi/defcfn free-moqbroadcastdynamic "uniffi_moq_ffi_fn_free_moqbroadcastdynamic" [:uint64 :pointer] :void)
274+(ffi/defcfn free-moqbroadcastproducer "uniffi_moq_ffi_fn_free_moqbroadcastproducer" [:uint64 :pointer] :void)
275+(ffi/defcfn free-moqbroadcastrequest "uniffi_moq_ffi_fn_free_moqbroadcastrequest" [:uint64 :pointer] :void)
276+(ffi/defcfn free-moqcatalogconsumer "uniffi_moq_ffi_fn_free_moqcatalogconsumer" [:uint64 :pointer] :void)
277+(ffi/defcfn free-moqclient "uniffi_moq_ffi_fn_free_moqclient" [:uint64 :pointer] :void)
278+(ffi/defcfn free-moqgroupconsumer "uniffi_moq_ffi_fn_free_moqgroupconsumer" [:uint64 :pointer] :void)
279+(ffi/defcfn free-moqgroupproducer "uniffi_moq_ffi_fn_free_moqgroupproducer" [:uint64 :pointer] :void)
280+(ffi/defcfn free-moqgrouprequest "uniffi_moq_ffi_fn_free_moqgrouprequest" [:uint64 :pointer] :void)
281+(ffi/defcfn free-moqjsonsnapshotconsumer "uniffi_moq_ffi_fn_free_moqjsonsnapshotconsumer" [:uint64 :pointer] :void)
282+(ffi/defcfn free-moqjsonsnapshotproducer "uniffi_moq_ffi_fn_free_moqjsonsnapshotproducer" [:uint64 :pointer] :void)
283+(ffi/defcfn free-moqjsonstreamconsumer "uniffi_moq_ffi_fn_free_moqjsonstreamconsumer" [:uint64 :pointer] :void)
284+(ffi/defcfn free-moqjsonstreamproducer "uniffi_moq_ffi_fn_free_moqjsonstreamproducer" [:uint64 :pointer] :void)
285+(ffi/defcfn free-moqmediaconsumer "uniffi_moq_ffi_fn_free_moqmediaconsumer" [:uint64 :pointer] :void)
286+(ffi/defcfn free-moqmediagroupconsumer "uniffi_moq_ffi_fn_free_moqmediagroupconsumer" [:uint64 :pointer] :void)
287+(ffi/defcfn free-moqmediaproducer "uniffi_moq_ffi_fn_free_moqmediaproducer" [:uint64 :pointer] :void)
288+(ffi/defcfn free-moqmediastreamproducer "uniffi_moq_ffi_fn_free_moqmediastreamproducer" [:uint64 :pointer] :void)
289+(ffi/defcfn free-moqoriginconsumer "uniffi_moq_ffi_fn_free_moqoriginconsumer" [:uint64 :pointer] :void)
290+(ffi/defcfn free-moqorigindynamic "uniffi_moq_ffi_fn_free_moqorigindynamic" [:uint64 :pointer] :void)
291+(ffi/defcfn free-moqoriginproducer "uniffi_moq_ffi_fn_free_moqoriginproducer" [:uint64 :pointer] :void)
292+(ffi/defcfn free-moqrequest "uniffi_moq_ffi_fn_free_moqrequest" [:uint64 :pointer] :void)
293+(ffi/defcfn free-moqroutewatch "uniffi_moq_ffi_fn_free_moqroutewatch" [:uint64 :pointer] :void)
294+(ffi/defcfn free-moqserver "uniffi_moq_ffi_fn_free_moqserver" [:uint64 :pointer] :void)
295+(ffi/defcfn free-moqsession "uniffi_moq_ffi_fn_free_moqsession" [:uint64 :pointer] :void)
296+(ffi/defcfn free-moqtrackconsumer "uniffi_moq_ffi_fn_free_moqtrackconsumer" [:uint64 :pointer] :void)
297+(ffi/defcfn free-moqtrackdynamic "uniffi_moq_ffi_fn_free_moqtrackdynamic" [:uint64 :pointer] :void)
298+(ffi/defcfn free-moqtrackproducer "uniffi_moq_ffi_fn_free_moqtrackproducer" [:uint64 :pointer] :void)
299+(ffi/defcfn free-moqtrackrequest "uniffi_moq_ffi_fn_free_moqtrackrequest" [:uint64 :pointer] :void)
300+(ffi/defcfn func-moq-log-level "uniffi_moq_ffi_fn_func_moq_log_level" [[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
301+(ffi/defcfn method-moqannounced-cancel "uniffi_moq_ffi_fn_method_moqannounced_cancel" [:uint64 :pointer] :void)
302+(ffi/defcfn method-moqannounced-next "uniffi_moq_ffi_fn_method_moqannounced_next" [:uint64] :uint64)
303+(ffi/defcfn method-moqannouncedbroadcast-available "uniffi_moq_ffi_fn_method_moqannouncedbroadcast_available" [:uint64] :uint64)
304+(ffi/defcfn method-moqannouncedbroadcast-cancel "uniffi_moq_ffi_fn_method_moqannouncedbroadcast_cancel" [:uint64 :pointer] :void)
305+(ffi/defcfn method-moqannouncement-broadcast "uniffi_moq_ffi_fn_method_moqannouncement_broadcast" [:uint64 :pointer] :uint64)
306+(ffi/defcfn method-moqannouncement-path "uniffi_moq_ffi_fn_method_moqannouncement_path" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
307+(ffi/defcfn method-moqbroadcastconsumer-fetch-group "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_fetch_group" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
308+(ffi/defcfn method-moqbroadcastconsumer-fetch-media-group "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_fetch_media_group" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
309+(ffi/defcfn method-moqbroadcastconsumer-route "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_route" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
310+(ffi/defcfn method-moqbroadcastconsumer-route-updates "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_route_updates" [:uint64 :pointer] :uint64)
311+(ffi/defcfn method-moqbroadcastconsumer-subscribe-catalog "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_catalog" [:uint64] :uint64)
312+(ffi/defcfn method-moqbroadcastconsumer-subscribe-json-snapshot "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_json_snapshot" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
313+(ffi/defcfn method-moqbroadcastconsumer-subscribe-json-stream "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_json_stream" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
314+(ffi/defcfn method-moqbroadcastconsumer-subscribe-media "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_media" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
315+(ffi/defcfn method-moqbroadcastconsumer-subscribe-track "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_track" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
316+(ffi/defcfn method-moqbroadcastdynamic-cancel "uniffi_moq_ffi_fn_method_moqbroadcastdynamic_cancel" [:uint64 :pointer] :void)
317+(ffi/defcfn method-moqbroadcastdynamic-requested-track "uniffi_moq_ffi_fn_method_moqbroadcastdynamic_requested_track" [:uint64] :uint64)
318+(ffi/defcfn method-moqbroadcastproducer-consume "uniffi_moq_ffi_fn_method_moqbroadcastproducer_consume" [:uint64 :pointer] :uint64)
319+(ffi/defcfn method-moqbroadcastproducer-dynamic "uniffi_moq_ffi_fn_method_moqbroadcastproducer_dynamic" [:uint64 :pointer] :uint64)
320+(ffi/defcfn method-moqbroadcastproducer-finish "uniffi_moq_ffi_fn_method_moqbroadcastproducer_finish" [:uint64 :pointer] :void)
321+(ffi/defcfn method-moqbroadcastproducer-publish-json-snapshot "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_json_snapshot" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
322+(ffi/defcfn method-moqbroadcastproducer-publish-json-stream "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_json_stream" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
323+(ffi/defcfn method-moqbroadcastproducer-publish-media "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_media" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
324+(ffi/defcfn method-moqbroadcastproducer-publish-media-on-track "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_media_on_track" [:uint64 :uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
325+(ffi/defcfn method-moqbroadcastproducer-publish-media-stream "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_media_stream" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
326+(ffi/defcfn method-moqbroadcastproducer-publish-track "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_track" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
327+(ffi/defcfn method-moqbroadcastproducer-remove-catalog-section "uniffi_moq_ffi_fn_method_moqbroadcastproducer_remove_catalog_section" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
328+(ffi/defcfn method-moqbroadcastproducer-set-announce "uniffi_moq_ffi_fn_method_moqbroadcastproducer_set_announce" [:uint64 :int8 :pointer] :void)
329+(ffi/defcfn method-moqbroadcastproducer-set-catalog-section "uniffi_moq_ffi_fn_method_moqbroadcastproducer_set_catalog_section" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
330+(ffi/defcfn method-moqbroadcastproducer-set-route "uniffi_moq_ffi_fn_method_moqbroadcastproducer_set_route" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
331+(ffi/defcfn method-moqbroadcastproducer-set-video-properties "uniffi_moq_ffi_fn_method_moqbroadcastproducer_set_video_properties" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
332+(ffi/defcfn method-moqbroadcastrequest-abort "uniffi_moq_ffi_fn_method_moqbroadcastrequest_abort" [:uint64 :uint16 :pointer] :void)
333+(ffi/defcfn method-moqbroadcastrequest-accept "uniffi_moq_ffi_fn_method_moqbroadcastrequest_accept" [:uint64 :uint64 :pointer] :void)
334+(ffi/defcfn method-moqbroadcastrequest-path "uniffi_moq_ffi_fn_method_moqbroadcastrequest_path" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
335+(ffi/defcfn method-moqcatalogconsumer-cancel "uniffi_moq_ffi_fn_method_moqcatalogconsumer_cancel" [:uint64 :pointer] :void)
336+(ffi/defcfn method-moqcatalogconsumer-next "uniffi_moq_ffi_fn_method_moqcatalogconsumer_next" [:uint64] :uint64)
337+(ffi/defcfn method-moqclient-cancel "uniffi_moq_ffi_fn_method_moqclient_cancel" [:uint64 :pointer] :void)
338+(ffi/defcfn method-moqclient-connect "uniffi_moq_ffi_fn_method_moqclient_connect" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
339+(ffi/defcfn method-moqclient-set-bind "uniffi_moq_ffi_fn_method_moqclient_set_bind" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
340+(ffi/defcfn method-moqclient-set-consume "uniffi_moq_ffi_fn_method_moqclient_set_consume" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
341+(ffi/defcfn method-moqclient-set-publish "uniffi_moq_ffi_fn_method_moqclient_set_publish" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
342+(ffi/defcfn method-moqclient-set-tls-cert "uniffi_moq_ffi_fn_method_moqclient_set_tls_cert" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
343+(ffi/defcfn method-moqclient-set-tls-disable-verify "uniffi_moq_ffi_fn_method_moqclient_set_tls_disable_verify" [:uint64 :int8 :pointer] :void)
344+(ffi/defcfn method-moqclient-set-tls-fingerprints "uniffi_moq_ffi_fn_method_moqclient_set_tls_fingerprints" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
345+(ffi/defcfn method-moqclient-set-tls-key "uniffi_moq_ffi_fn_method_moqclient_set_tls_key" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
346+(ffi/defcfn method-moqclient-set-tls-roots "uniffi_moq_ffi_fn_method_moqclient_set_tls_roots" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
347+(ffi/defcfn method-moqclient-set-tls-system-roots "uniffi_moq_ffi_fn_method_moqclient_set_tls_system_roots" [:uint64 :int8 :pointer] :void)
348+(ffi/defcfn method-moqgroupconsumer-cancel "uniffi_moq_ffi_fn_method_moqgroupconsumer_cancel" [:uint64 :pointer] :void)
349+(ffi/defcfn method-moqgroupconsumer-read-frame "uniffi_moq_ffi_fn_method_moqgroupconsumer_read_frame" [:uint64] :uint64)
350+(ffi/defcfn method-moqgroupconsumer-sequence "uniffi_moq_ffi_fn_method_moqgroupconsumer_sequence" [:uint64 :pointer] :uint64)
351+(ffi/defcfn method-moqgroupproducer-abort "uniffi_moq_ffi_fn_method_moqgroupproducer_abort" [:uint64 :uint16 :pointer] :void)
352+(ffi/defcfn method-moqgroupproducer-consume "uniffi_moq_ffi_fn_method_moqgroupproducer_consume" [:uint64 :pointer] :uint64)
353+(ffi/defcfn method-moqgroupproducer-finish "uniffi_moq_ffi_fn_method_moqgroupproducer_finish" [:uint64 :pointer] :void)
354+(ffi/defcfn method-moqgroupproducer-sequence "uniffi_moq_ffi_fn_method_moqgroupproducer_sequence" [:uint64 :pointer] :uint64)
355+(ffi/defcfn method-moqgroupproducer-write-frame "uniffi_moq_ffi_fn_method_moqgroupproducer_write_frame" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
356+(ffi/defcfn method-moqgrouprequest-abort "uniffi_moq_ffi_fn_method_moqgrouprequest_abort" [:uint64 :uint16 :pointer] :void)
357+(ffi/defcfn method-moqgrouprequest-accept "uniffi_moq_ffi_fn_method_moqgrouprequest_accept" [:uint64 :pointer] :uint64)
358+(ffi/defcfn method-moqgrouprequest-priority "uniffi_moq_ffi_fn_method_moqgrouprequest_priority" [:uint64 :pointer] :uint8)
359+(ffi/defcfn method-moqgrouprequest-sequence "uniffi_moq_ffi_fn_method_moqgrouprequest_sequence" [:uint64 :pointer] :uint64)
360+(ffi/defcfn method-moqjsonsnapshotconsumer-cancel "uniffi_moq_ffi_fn_method_moqjsonsnapshotconsumer_cancel" [:uint64 :pointer] :void)
361+(ffi/defcfn method-moqjsonsnapshotconsumer-next "uniffi_moq_ffi_fn_method_moqjsonsnapshotconsumer_next" [:uint64] :uint64)
362+(ffi/defcfn method-moqjsonsnapshotproducer-finish "uniffi_moq_ffi_fn_method_moqjsonsnapshotproducer_finish" [:uint64 :pointer] :void)
363+(ffi/defcfn method-moqjsonsnapshotproducer-update "uniffi_moq_ffi_fn_method_moqjsonsnapshotproducer_update" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
364+(ffi/defcfn method-moqjsonstreamconsumer-cancel "uniffi_moq_ffi_fn_method_moqjsonstreamconsumer_cancel" [:uint64 :pointer] :void)
365+(ffi/defcfn method-moqjsonstreamconsumer-next "uniffi_moq_ffi_fn_method_moqjsonstreamconsumer_next" [:uint64] :uint64)
366+(ffi/defcfn method-moqjsonstreamproducer-append "uniffi_moq_ffi_fn_method_moqjsonstreamproducer_append" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
367+(ffi/defcfn method-moqjsonstreamproducer-finish "uniffi_moq_ffi_fn_method_moqjsonstreamproducer_finish" [:uint64 :pointer] :void)
368+(ffi/defcfn method-moqmediaconsumer-cancel "uniffi_moq_ffi_fn_method_moqmediaconsumer_cancel" [:uint64 :pointer] :void)
369+(ffi/defcfn method-moqmediaconsumer-next "uniffi_moq_ffi_fn_method_moqmediaconsumer_next" [:uint64] :uint64)
370+(ffi/defcfn method-moqmediagroupconsumer-cancel "uniffi_moq_ffi_fn_method_moqmediagroupconsumer_cancel" [:uint64 :pointer] :void)
371+(ffi/defcfn method-moqmediagroupconsumer-next "uniffi_moq_ffi_fn_method_moqmediagroupconsumer_next" [:uint64] :uint64)
372+(ffi/defcfn method-moqmediagroupconsumer-sequence "uniffi_moq_ffi_fn_method_moqmediagroupconsumer_sequence" [:uint64 :pointer] :uint64)
373+(ffi/defcfn method-moqmediaproducer-finish "uniffi_moq_ffi_fn_method_moqmediaproducer_finish" [:uint64 :pointer] :void)
374+(ffi/defcfn method-moqmediaproducer-name "uniffi_moq_ffi_fn_method_moqmediaproducer_name" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
375+(ffi/defcfn method-moqmediaproducer-unused "uniffi_moq_ffi_fn_method_moqmediaproducer_unused" [:uint64] :uint64)
376+(ffi/defcfn method-moqmediaproducer-used "uniffi_moq_ffi_fn_method_moqmediaproducer_used" [:uint64] :uint64)
377+(ffi/defcfn method-moqmediaproducer-write-frame "uniffi_moq_ffi_fn_method_moqmediaproducer_write_frame" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
378+(ffi/defcfn method-moqmediastreamproducer-finish "uniffi_moq_ffi_fn_method_moqmediastreamproducer_finish" [:uint64 :pointer] :void)
379+(ffi/defcfn method-moqmediastreamproducer-write "uniffi_moq_ffi_fn_method_moqmediastreamproducer_write" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
380+(ffi/defcfn method-moqoriginconsumer-announced "uniffi_moq_ffi_fn_method_moqoriginconsumer_announced" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
381+(ffi/defcfn method-moqoriginconsumer-announced-broadcast "uniffi_moq_ffi_fn_method_moqoriginconsumer_announced_broadcast" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
382+(ffi/defcfn method-moqoriginconsumer-request-broadcast "uniffi_moq_ffi_fn_method_moqoriginconsumer_request_broadcast" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
383+(ffi/defcfn method-moqorigindynamic-cancel "uniffi_moq_ffi_fn_method_moqorigindynamic_cancel" [:uint64 :pointer] :void)
384+(ffi/defcfn method-moqorigindynamic-requested-broadcast "uniffi_moq_ffi_fn_method_moqorigindynamic_requested_broadcast" [:uint64] :uint64)
385+(ffi/defcfn method-moqoriginproducer-consume "uniffi_moq_ffi_fn_method_moqoriginproducer_consume" [:uint64 :pointer] :uint64)
386+(ffi/defcfn method-moqoriginproducer-create-broadcast "uniffi_moq_ffi_fn_method_moqoriginproducer_create_broadcast" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
387+(ffi/defcfn method-moqoriginproducer-dynamic "uniffi_moq_ffi_fn_method_moqoriginproducer_dynamic" [:uint64 :pointer] :uint64)
388+(ffi/defcfn method-moqrequest-accept "uniffi_moq_ffi_fn_method_moqrequest_accept" [:uint64] :uint64)
389+(ffi/defcfn method-moqrequest-cancel "uniffi_moq_ffi_fn_method_moqrequest_cancel" [:uint64 :pointer] :void)
390+(ffi/defcfn method-moqrequest-path "uniffi_moq_ffi_fn_method_moqrequest_path" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
391+(ffi/defcfn method-moqrequest-query "uniffi_moq_ffi_fn_method_moqrequest_query" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
392+(ffi/defcfn method-moqrequest-reject "uniffi_moq_ffi_fn_method_moqrequest_reject" [:uint64 :uint16] :uint64)
393+(ffi/defcfn method-moqrequest-set-consume "uniffi_moq_ffi_fn_method_moqrequest_set_consume" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
394+(ffi/defcfn method-moqrequest-set-publish "uniffi_moq_ffi_fn_method_moqrequest_set_publish" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
395+(ffi/defcfn method-moqrequest-transport "uniffi_moq_ffi_fn_method_moqrequest_transport" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
396+(ffi/defcfn method-moqrequest-url "uniffi_moq_ffi_fn_method_moqrequest_url" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
397+(ffi/defcfn method-moqroutewatch-cancel "uniffi_moq_ffi_fn_method_moqroutewatch_cancel" [:uint64 :pointer] :void)
398+(ffi/defcfn method-moqroutewatch-next "uniffi_moq_ffi_fn_method_moqroutewatch_next" [:uint64] :uint64)
399+(ffi/defcfn method-moqserver-accept "uniffi_moq_ffi_fn_method_moqserver_accept" [:uint64] :uint64)
400+(ffi/defcfn method-moqserver-cancel "uniffi_moq_ffi_fn_method_moqserver_cancel" [:uint64 :pointer] :void)
401+(ffi/defcfn method-moqserver-cert-fingerprints "uniffi_moq_ffi_fn_method_moqserver_cert_fingerprints" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
402+(ffi/defcfn method-moqserver-listen "uniffi_moq_ffi_fn_method_moqserver_listen" [:uint64] :uint64)
403+(ffi/defcfn method-moqserver-set-bind "uniffi_moq_ffi_fn_method_moqserver_set_bind" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
404+(ffi/defcfn method-moqserver-set-consume "uniffi_moq_ffi_fn_method_moqserver_set_consume" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
405+(ffi/defcfn method-moqserver-set-publish "uniffi_moq_ffi_fn_method_moqserver_set_publish" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
406+(ffi/defcfn method-moqserver-set-tls-cert "uniffi_moq_ffi_fn_method_moqserver_set_tls_cert" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
407+(ffi/defcfn method-moqserver-set-tls-generate "uniffi_moq_ffi_fn_method_moqserver_set_tls_generate" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
408+(ffi/defcfn method-moqserver-set-tls-key "uniffi_moq_ffi_fn_method_moqserver_set_tls_key" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
409+(ffi/defcfn method-moqsession-cancel "uniffi_moq_ffi_fn_method_moqsession_cancel" [:uint64 :uint32 :pointer] :void)
410+(ffi/defcfn method-moqsession-closed "uniffi_moq_ffi_fn_method_moqsession_closed" [:uint64] :uint64)
411+(ffi/defcfn method-moqsession-consumer "uniffi_moq_ffi_fn_method_moqsession_consumer" [:uint64 :pointer] :uint64)
412+(ffi/defcfn method-moqsession-publisher "uniffi_moq_ffi_fn_method_moqsession_publisher" [:uint64 :pointer] :uint64)
413+(ffi/defcfn method-moqsession-shutdown "uniffi_moq_ffi_fn_method_moqsession_shutdown" [:uint64 :pointer] :void)
414+(ffi/defcfn method-moqsession-stats "uniffi_moq_ffi_fn_method_moqsession_stats" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
415+(ffi/defcfn method-moqtrackconsumer-cancel "uniffi_moq_ffi_fn_method_moqtrackconsumer_cancel" [:uint64 :pointer] :void)
416+(ffi/defcfn method-moqtrackconsumer-info "uniffi_moq_ffi_fn_method_moqtrackconsumer_info" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
417+(ffi/defcfn method-moqtrackconsumer-next-group "uniffi_moq_ffi_fn_method_moqtrackconsumer_next_group" [:uint64] :uint64)
418+(ffi/defcfn method-moqtrackconsumer-read-frame "uniffi_moq_ffi_fn_method_moqtrackconsumer_read_frame" [:uint64] :uint64)
419+(ffi/defcfn method-moqtrackconsumer-recv-datagram "uniffi_moq_ffi_fn_method_moqtrackconsumer_recv_datagram" [:uint64] :uint64)
420+(ffi/defcfn method-moqtrackconsumer-recv-group "uniffi_moq_ffi_fn_method_moqtrackconsumer_recv_group" [:uint64] :uint64)
421+(ffi/defcfn method-moqtrackconsumer-update "uniffi_moq_ffi_fn_method_moqtrackconsumer_update" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
422+(ffi/defcfn method-moqtrackdynamic-cancel "uniffi_moq_ffi_fn_method_moqtrackdynamic_cancel" [:uint64 :pointer] :void)
423+(ffi/defcfn method-moqtrackdynamic-requested-group "uniffi_moq_ffi_fn_method_moqtrackdynamic_requested_group" [:uint64] :uint64)
424+(ffi/defcfn method-moqtrackproducer-abort "uniffi_moq_ffi_fn_method_moqtrackproducer_abort" [:uint64 :uint16 :pointer] :void)
425+(ffi/defcfn method-moqtrackproducer-append-datagram "uniffi_moq_ffi_fn_method_moqtrackproducer_append_datagram" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
426+(ffi/defcfn method-moqtrackproducer-append-group "uniffi_moq_ffi_fn_method_moqtrackproducer_append_group" [:uint64 :pointer] :uint64)
427+(ffi/defcfn method-moqtrackproducer-consume "uniffi_moq_ffi_fn_method_moqtrackproducer_consume" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
428+(ffi/defcfn method-moqtrackproducer-create-group "uniffi_moq_ffi_fn_method_moqtrackproducer_create_group" [:uint64 :uint64 :pointer] :uint64)
429+(ffi/defcfn method-moqtrackproducer-dynamic "uniffi_moq_ffi_fn_method_moqtrackproducer_dynamic" [:uint64 :pointer] :uint64)
430+(ffi/defcfn method-moqtrackproducer-finish "uniffi_moq_ffi_fn_method_moqtrackproducer_finish" [:uint64 :pointer] :void)
431+(ffi/defcfn method-moqtrackproducer-finish-at "uniffi_moq_ffi_fn_method_moqtrackproducer_finish_at" [:uint64 :uint64 :pointer] :void)
432+(ffi/defcfn method-moqtrackproducer-name "uniffi_moq_ffi_fn_method_moqtrackproducer_name" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
433+(ffi/defcfn method-moqtrackproducer-unused "uniffi_moq_ffi_fn_method_moqtrackproducer_unused" [:uint64] :uint64)
434+(ffi/defcfn method-moqtrackproducer-used "uniffi_moq_ffi_fn_method_moqtrackproducer_used" [:uint64] :uint64)
435+(ffi/defcfn method-moqtrackproducer-write-frame "uniffi_moq_ffi_fn_method_moqtrackproducer_write_frame" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
436+(ffi/defcfn method-moqtrackrequest-abort "uniffi_moq_ffi_fn_method_moqtrackrequest_abort" [:uint64 :uint16 :pointer] :void)
437+(ffi/defcfn method-moqtrackrequest-accept "uniffi_moq_ffi_fn_method_moqtrackrequest_accept" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
438+(ffi/defcfn method-moqtrackrequest-dynamic "uniffi_moq_ffi_fn_method_moqtrackrequest_dynamic" [:uint64 :pointer] :uint64)
439+(ffi/defcfn method-moqtrackrequest-name "uniffi_moq_ffi_fn_method_moqtrackrequest_name" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
new file mode 100644
@@ -0,0 +1,439 @@
1+(ns frq.moq.raw
2+ "Every entry point in libmoq_ffi, declared. GENERATED — do not edit.
3+
4+ just gen-moq
5+
6+ These are not transcribed from a header. UniFFI embeds its interface
7+ metadata in the object itself, and `uniffi-bindgen --library` reads it back
8+ out, so what is declared here is what the .so we ship actually exports —
9+ which matters more than it sounds. The release's Apple artifact and its
10+ Linux/Android ones are *different builds*: moq-ffi's `audio` and `video`
11+ features are on by default and were switched off for Linux and Android, so
12+ the shipped C header describes 230 entry points where the object we load has
13+ 403 symbols covering 206 functions, with `publish_audio`, `publish_video`
14+ and the whole `moqaudio*`/`moqvideo*` surface absent. Binding the header
15+ would have produced calls that link on a Mac and fail on the two platforms
16+ frq targets.
17+
18+ Nothing here is hand-written and nothing is inferred. The generator maps a
19+ ctype it does not recognise to nothing at all and reports it, rather than
20+ guessing a width — a wrong one would be a silent memory bug rather than a
21+ compile error.
22+
23+ Two shapes recur, and both are spelled out in full at every call site rather
24+ than named: `defcfn` is a macro whose types Chez fixes when it COMPILES the
25+ foreign procedure, so a `def`'d descriptor in type position has nothing to
26+ compile. Hence the literal [:by-value [:struct ...]] repeated throughout —
27+ it is the RustBuffer {capacity, len, data} triple, or the ForeignBytes pair.
28+
29+ A trailing :pointer on a non-async function is its `RustCallStatus *`
30+ out-parameter; `frq.moq.uniffi/with-out-status` is what supplies one. An
31+ async function has no status and answers a future handle instead — poll it
32+ through `frq.moq.uniffi/start-future`.
33+
34+ Generated from moq-ffi 0.3.17, UniFFI contract 30."
35+ (:require [jolt.ffi :as ffi]))
36+
37+(ffi/defcfn rust-future-cancel-f32 "ffi_moq_ffi_rust_future_cancel_f32" [:uint64] :void)
38+(ffi/defcfn rust-future-cancel-f64 "ffi_moq_ffi_rust_future_cancel_f64" [:uint64] :void)
39+(ffi/defcfn rust-future-cancel-i16 "ffi_moq_ffi_rust_future_cancel_i16" [:uint64] :void)
40+(ffi/defcfn rust-future-cancel-i32 "ffi_moq_ffi_rust_future_cancel_i32" [:uint64] :void)
41+(ffi/defcfn rust-future-cancel-i64 "ffi_moq_ffi_rust_future_cancel_i64" [:uint64] :void)
42+(ffi/defcfn rust-future-cancel-i8 "ffi_moq_ffi_rust_future_cancel_i8" [:uint64] :void)
43+(ffi/defcfn rust-future-cancel-rust-buffer "ffi_moq_ffi_rust_future_cancel_rust_buffer" [:uint64] :void)
44+(ffi/defcfn rust-future-cancel-u16 "ffi_moq_ffi_rust_future_cancel_u16" [:uint64] :void)
45+(ffi/defcfn rust-future-cancel-u32 "ffi_moq_ffi_rust_future_cancel_u32" [:uint64] :void)
46+(ffi/defcfn rust-future-cancel-u64 "ffi_moq_ffi_rust_future_cancel_u64" [:uint64] :void)
47+(ffi/defcfn rust-future-cancel-u8 "ffi_moq_ffi_rust_future_cancel_u8" [:uint64] :void)
48+(ffi/defcfn rust-future-cancel-void "ffi_moq_ffi_rust_future_cancel_void" [:uint64] :void)
49+(ffi/defcfn rust-future-complete-f32 "ffi_moq_ffi_rust_future_complete_f32" [:uint64 :pointer] :float)
50+(ffi/defcfn rust-future-complete-f64 "ffi_moq_ffi_rust_future_complete_f64" [:uint64 :pointer] :double)
51+(ffi/defcfn rust-future-complete-i16 "ffi_moq_ffi_rust_future_complete_i16" [:uint64 :pointer] :int16)
52+(ffi/defcfn rust-future-complete-i32 "ffi_moq_ffi_rust_future_complete_i32" [:uint64 :pointer] :int32)
53+(ffi/defcfn rust-future-complete-i64 "ffi_moq_ffi_rust_future_complete_i64" [:uint64 :pointer] :int64)
54+(ffi/defcfn rust-future-complete-i8 "ffi_moq_ffi_rust_future_complete_i8" [:uint64 :pointer] :int8)
55+(ffi/defcfn rust-future-complete-rust-buffer "ffi_moq_ffi_rust_future_complete_rust_buffer" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
56+(ffi/defcfn rust-future-complete-u16 "ffi_moq_ffi_rust_future_complete_u16" [:uint64 :pointer] :uint16)
57+(ffi/defcfn rust-future-complete-u32 "ffi_moq_ffi_rust_future_complete_u32" [:uint64 :pointer] :uint32)
58+(ffi/defcfn rust-future-complete-u64 "ffi_moq_ffi_rust_future_complete_u64" [:uint64 :pointer] :uint64)
59+(ffi/defcfn rust-future-complete-u8 "ffi_moq_ffi_rust_future_complete_u8" [:uint64 :pointer] :uint8)
60+(ffi/defcfn rust-future-complete-void "ffi_moq_ffi_rust_future_complete_void" [:uint64 :pointer] :void)
61+(ffi/defcfn rust-future-free-f32 "ffi_moq_ffi_rust_future_free_f32" [:uint64] :void)
62+(ffi/defcfn rust-future-free-f64 "ffi_moq_ffi_rust_future_free_f64" [:uint64] :void)
63+(ffi/defcfn rust-future-free-i16 "ffi_moq_ffi_rust_future_free_i16" [:uint64] :void)
64+(ffi/defcfn rust-future-free-i32 "ffi_moq_ffi_rust_future_free_i32" [:uint64] :void)
65+(ffi/defcfn rust-future-free-i64 "ffi_moq_ffi_rust_future_free_i64" [:uint64] :void)
66+(ffi/defcfn rust-future-free-i8 "ffi_moq_ffi_rust_future_free_i8" [:uint64] :void)
67+(ffi/defcfn rust-future-free-rust-buffer "ffi_moq_ffi_rust_future_free_rust_buffer" [:uint64] :void)
68+(ffi/defcfn rust-future-free-u16 "ffi_moq_ffi_rust_future_free_u16" [:uint64] :void)
69+(ffi/defcfn rust-future-free-u32 "ffi_moq_ffi_rust_future_free_u32" [:uint64] :void)
70+(ffi/defcfn rust-future-free-u64 "ffi_moq_ffi_rust_future_free_u64" [:uint64] :void)
71+(ffi/defcfn rust-future-free-u8 "ffi_moq_ffi_rust_future_free_u8" [:uint64] :void)
72+(ffi/defcfn rust-future-free-void "ffi_moq_ffi_rust_future_free_void" [:uint64] :void)
73+(ffi/defcfn rust-future-poll-f32 "ffi_moq_ffi_rust_future_poll_f32" [:uint64 :pointer :uint64] :void)
74+(ffi/defcfn rust-future-poll-f64 "ffi_moq_ffi_rust_future_poll_f64" [:uint64 :pointer :uint64] :void)
75+(ffi/defcfn rust-future-poll-i16 "ffi_moq_ffi_rust_future_poll_i16" [:uint64 :pointer :uint64] :void)
76+(ffi/defcfn rust-future-poll-i32 "ffi_moq_ffi_rust_future_poll_i32" [:uint64 :pointer :uint64] :void)
77+(ffi/defcfn rust-future-poll-i64 "ffi_moq_ffi_rust_future_poll_i64" [:uint64 :pointer :uint64] :void)
78+(ffi/defcfn rust-future-poll-i8 "ffi_moq_ffi_rust_future_poll_i8" [:uint64 :pointer :uint64] :void)
79+(ffi/defcfn rust-future-poll-rust-buffer "ffi_moq_ffi_rust_future_poll_rust_buffer" [:uint64 :pointer :uint64] :void)
80+(ffi/defcfn rust-future-poll-u16 "ffi_moq_ffi_rust_future_poll_u16" [:uint64 :pointer :uint64] :void)
81+(ffi/defcfn rust-future-poll-u32 "ffi_moq_ffi_rust_future_poll_u32" [:uint64 :pointer :uint64] :void)
82+(ffi/defcfn rust-future-poll-u64 "ffi_moq_ffi_rust_future_poll_u64" [:uint64 :pointer :uint64] :void)
83+(ffi/defcfn rust-future-poll-u8 "ffi_moq_ffi_rust_future_poll_u8" [:uint64 :pointer :uint64] :void)
84+(ffi/defcfn rust-future-poll-void "ffi_moq_ffi_rust_future_poll_void" [:uint64 :pointer :uint64] :void)
85+(ffi/defcfn rustbuffer-alloc "ffi_moq_ffi_rustbuffer_alloc" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
86+(ffi/defcfn rustbuffer-free "ffi_moq_ffi_rustbuffer_free" [[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
87+(ffi/defcfn rustbuffer-from-bytes "ffi_moq_ffi_rustbuffer_from_bytes" [[:by-value [:struct [[:len :int32] [:data :pointer]]]] :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
88+(ffi/defcfn rustbuffer-reserve "ffi_moq_ffi_rustbuffer_reserve" [[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
89+(ffi/defcfn uniffi-contract-version "ffi_moq_ffi_uniffi_contract_version" [] :uint32)
90+(ffi/defcfn checksum-constructor-moqbroadcastproducer-new "uniffi_moq_ffi_checksum_constructor_moqbroadcastproducer_new" [] :uint16)
91+(ffi/defcfn checksum-constructor-moqclient-new "uniffi_moq_ffi_checksum_constructor_moqclient_new" [] :uint16)
92+(ffi/defcfn checksum-constructor-moqoriginproducer-new "uniffi_moq_ffi_checksum_constructor_moqoriginproducer_new" [] :uint16)
93+(ffi/defcfn checksum-constructor-moqserver-new "uniffi_moq_ffi_checksum_constructor_moqserver_new" [] :uint16)
94+(ffi/defcfn checksum-func-moq-log-level "uniffi_moq_ffi_checksum_func_moq_log_level" [] :uint16)
95+(ffi/defcfn checksum-method-moqannounced-cancel "uniffi_moq_ffi_checksum_method_moqannounced_cancel" [] :uint16)
96+(ffi/defcfn checksum-method-moqannounced-next "uniffi_moq_ffi_checksum_method_moqannounced_next" [] :uint16)
97+(ffi/defcfn checksum-method-moqannouncedbroadcast-available "uniffi_moq_ffi_checksum_method_moqannouncedbroadcast_available" [] :uint16)
98+(ffi/defcfn checksum-method-moqannouncedbroadcast-cancel "uniffi_moq_ffi_checksum_method_moqannouncedbroadcast_cancel" [] :uint16)
99+(ffi/defcfn checksum-method-moqannouncement-broadcast "uniffi_moq_ffi_checksum_method_moqannouncement_broadcast" [] :uint16)
100+(ffi/defcfn checksum-method-moqannouncement-path "uniffi_moq_ffi_checksum_method_moqannouncement_path" [] :uint16)
101+(ffi/defcfn checksum-method-moqbroadcastconsumer-fetch-group "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_fetch_group" [] :uint16)
102+(ffi/defcfn checksum-method-moqbroadcastconsumer-fetch-media-group "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_fetch_media_group" [] :uint16)
103+(ffi/defcfn checksum-method-moqbroadcastconsumer-route "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_route" [] :uint16)
104+(ffi/defcfn checksum-method-moqbroadcastconsumer-route-updates "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_route_updates" [] :uint16)
105+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-catalog "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_catalog" [] :uint16)
106+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-json-snapshot "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_json_snapshot" [] :uint16)
107+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-json-stream "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_json_stream" [] :uint16)
108+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-media "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_media" [] :uint16)
109+(ffi/defcfn checksum-method-moqbroadcastconsumer-subscribe-track "uniffi_moq_ffi_checksum_method_moqbroadcastconsumer_subscribe_track" [] :uint16)
110+(ffi/defcfn checksum-method-moqbroadcastdynamic-cancel "uniffi_moq_ffi_checksum_method_moqbroadcastdynamic_cancel" [] :uint16)
111+(ffi/defcfn checksum-method-moqbroadcastdynamic-requested-track "uniffi_moq_ffi_checksum_method_moqbroadcastdynamic_requested_track" [] :uint16)
112+(ffi/defcfn checksum-method-moqbroadcastproducer-consume "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_consume" [] :uint16)
113+(ffi/defcfn checksum-method-moqbroadcastproducer-dynamic "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_dynamic" [] :uint16)
114+(ffi/defcfn checksum-method-moqbroadcastproducer-finish "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_finish" [] :uint16)
115+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-json-snapshot "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_json_snapshot" [] :uint16)
116+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-json-stream "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_json_stream" [] :uint16)
117+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-media "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_media" [] :uint16)
118+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-media-on-track "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_media_on_track" [] :uint16)
119+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-media-stream "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_media_stream" [] :uint16)
120+(ffi/defcfn checksum-method-moqbroadcastproducer-publish-track "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_publish_track" [] :uint16)
121+(ffi/defcfn checksum-method-moqbroadcastproducer-remove-catalog-section "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_remove_catalog_section" [] :uint16)
122+(ffi/defcfn checksum-method-moqbroadcastproducer-set-announce "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_set_announce" [] :uint16)
123+(ffi/defcfn checksum-method-moqbroadcastproducer-set-catalog-section "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_set_catalog_section" [] :uint16)
124+(ffi/defcfn checksum-method-moqbroadcastproducer-set-route "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_set_route" [] :uint16)
125+(ffi/defcfn checksum-method-moqbroadcastproducer-set-video-properties "uniffi_moq_ffi_checksum_method_moqbroadcastproducer_set_video_properties" [] :uint16)
126+(ffi/defcfn checksum-method-moqbroadcastrequest-abort "uniffi_moq_ffi_checksum_method_moqbroadcastrequest_abort" [] :uint16)
127+(ffi/defcfn checksum-method-moqbroadcastrequest-accept "uniffi_moq_ffi_checksum_method_moqbroadcastrequest_accept" [] :uint16)
128+(ffi/defcfn checksum-method-moqbroadcastrequest-path "uniffi_moq_ffi_checksum_method_moqbroadcastrequest_path" [] :uint16)
129+(ffi/defcfn checksum-method-moqcatalogconsumer-cancel "uniffi_moq_ffi_checksum_method_moqcatalogconsumer_cancel" [] :uint16)
130+(ffi/defcfn checksum-method-moqcatalogconsumer-next "uniffi_moq_ffi_checksum_method_moqcatalogconsumer_next" [] :uint16)
131+(ffi/defcfn checksum-method-moqclient-cancel "uniffi_moq_ffi_checksum_method_moqclient_cancel" [] :uint16)
132+(ffi/defcfn checksum-method-moqclient-connect "uniffi_moq_ffi_checksum_method_moqclient_connect" [] :uint16)
133+(ffi/defcfn checksum-method-moqclient-set-bind "uniffi_moq_ffi_checksum_method_moqclient_set_bind" [] :uint16)
134+(ffi/defcfn checksum-method-moqclient-set-consume "uniffi_moq_ffi_checksum_method_moqclient_set_consume" [] :uint16)
135+(ffi/defcfn checksum-method-moqclient-set-publish "uniffi_moq_ffi_checksum_method_moqclient_set_publish" [] :uint16)
136+(ffi/defcfn checksum-method-moqclient-set-tls-cert "uniffi_moq_ffi_checksum_method_moqclient_set_tls_cert" [] :uint16)
137+(ffi/defcfn checksum-method-moqclient-set-tls-disable-verify "uniffi_moq_ffi_checksum_method_moqclient_set_tls_disable_verify" [] :uint16)
138+(ffi/defcfn checksum-method-moqclient-set-tls-fingerprints "uniffi_moq_ffi_checksum_method_moqclient_set_tls_fingerprints" [] :uint16)
139+(ffi/defcfn checksum-method-moqclient-set-tls-key "uniffi_moq_ffi_checksum_method_moqclient_set_tls_key" [] :uint16)
140+(ffi/defcfn checksum-method-moqclient-set-tls-roots "uniffi_moq_ffi_checksum_method_moqclient_set_tls_roots" [] :uint16)
141+(ffi/defcfn checksum-method-moqclient-set-tls-system-roots "uniffi_moq_ffi_checksum_method_moqclient_set_tls_system_roots" [] :uint16)
142+(ffi/defcfn checksum-method-moqgroupconsumer-cancel "uniffi_moq_ffi_checksum_method_moqgroupconsumer_cancel" [] :uint16)
143+(ffi/defcfn checksum-method-moqgroupconsumer-read-frame "uniffi_moq_ffi_checksum_method_moqgroupconsumer_read_frame" [] :uint16)
144+(ffi/defcfn checksum-method-moqgroupconsumer-sequence "uniffi_moq_ffi_checksum_method_moqgroupconsumer_sequence" [] :uint16)
145+(ffi/defcfn checksum-method-moqgroupproducer-abort "uniffi_moq_ffi_checksum_method_moqgroupproducer_abort" [] :uint16)
146+(ffi/defcfn checksum-method-moqgroupproducer-consume "uniffi_moq_ffi_checksum_method_moqgroupproducer_consume" [] :uint16)
147+(ffi/defcfn checksum-method-moqgroupproducer-finish "uniffi_moq_ffi_checksum_method_moqgroupproducer_finish" [] :uint16)
148+(ffi/defcfn checksum-method-moqgroupproducer-sequence "uniffi_moq_ffi_checksum_method_moqgroupproducer_sequence" [] :uint16)
149+(ffi/defcfn checksum-method-moqgroupproducer-write-frame "uniffi_moq_ffi_checksum_method_moqgroupproducer_write_frame" [] :uint16)
150+(ffi/defcfn checksum-method-moqgrouprequest-abort "uniffi_moq_ffi_checksum_method_moqgrouprequest_abort" [] :uint16)
151+(ffi/defcfn checksum-method-moqgrouprequest-accept "uniffi_moq_ffi_checksum_method_moqgrouprequest_accept" [] :uint16)
152+(ffi/defcfn checksum-method-moqgrouprequest-priority "uniffi_moq_ffi_checksum_method_moqgrouprequest_priority" [] :uint16)
153+(ffi/defcfn checksum-method-moqgrouprequest-sequence "uniffi_moq_ffi_checksum_method_moqgrouprequest_sequence" [] :uint16)
154+(ffi/defcfn checksum-method-moqjsonsnapshotconsumer-cancel "uniffi_moq_ffi_checksum_method_moqjsonsnapshotconsumer_cancel" [] :uint16)
155+(ffi/defcfn checksum-method-moqjsonsnapshotconsumer-next "uniffi_moq_ffi_checksum_method_moqjsonsnapshotconsumer_next" [] :uint16)
156+(ffi/defcfn checksum-method-moqjsonsnapshotproducer-finish "uniffi_moq_ffi_checksum_method_moqjsonsnapshotproducer_finish" [] :uint16)
157+(ffi/defcfn checksum-method-moqjsonsnapshotproducer-update "uniffi_moq_ffi_checksum_method_moqjsonsnapshotproducer_update" [] :uint16)
158+(ffi/defcfn checksum-method-moqjsonstreamconsumer-cancel "uniffi_moq_ffi_checksum_method_moqjsonstreamconsumer_cancel" [] :uint16)
159+(ffi/defcfn checksum-method-moqjsonstreamconsumer-next "uniffi_moq_ffi_checksum_method_moqjsonstreamconsumer_next" [] :uint16)
160+(ffi/defcfn checksum-method-moqjsonstreamproducer-append "uniffi_moq_ffi_checksum_method_moqjsonstreamproducer_append" [] :uint16)
161+(ffi/defcfn checksum-method-moqjsonstreamproducer-finish "uniffi_moq_ffi_checksum_method_moqjsonstreamproducer_finish" [] :uint16)
162+(ffi/defcfn checksum-method-moqmediaconsumer-cancel "uniffi_moq_ffi_checksum_method_moqmediaconsumer_cancel" [] :uint16)
163+(ffi/defcfn checksum-method-moqmediaconsumer-next "uniffi_moq_ffi_checksum_method_moqmediaconsumer_next" [] :uint16)
164+(ffi/defcfn checksum-method-moqmediagroupconsumer-cancel "uniffi_moq_ffi_checksum_method_moqmediagroupconsumer_cancel" [] :uint16)
165+(ffi/defcfn checksum-method-moqmediagroupconsumer-next "uniffi_moq_ffi_checksum_method_moqmediagroupconsumer_next" [] :uint16)
166+(ffi/defcfn checksum-method-moqmediagroupconsumer-sequence "uniffi_moq_ffi_checksum_method_moqmediagroupconsumer_sequence" [] :uint16)
167+(ffi/defcfn checksum-method-moqmediaproducer-finish "uniffi_moq_ffi_checksum_method_moqmediaproducer_finish" [] :uint16)
168+(ffi/defcfn checksum-method-moqmediaproducer-name "uniffi_moq_ffi_checksum_method_moqmediaproducer_name" [] :uint16)
169+(ffi/defcfn checksum-method-moqmediaproducer-unused "uniffi_moq_ffi_checksum_method_moqmediaproducer_unused" [] :uint16)
170+(ffi/defcfn checksum-method-moqmediaproducer-used "uniffi_moq_ffi_checksum_method_moqmediaproducer_used" [] :uint16)
171+(ffi/defcfn checksum-method-moqmediaproducer-write-frame "uniffi_moq_ffi_checksum_method_moqmediaproducer_write_frame" [] :uint16)
172+(ffi/defcfn checksum-method-moqmediastreamproducer-finish "uniffi_moq_ffi_checksum_method_moqmediastreamproducer_finish" [] :uint16)
173+(ffi/defcfn checksum-method-moqmediastreamproducer-write "uniffi_moq_ffi_checksum_method_moqmediastreamproducer_write" [] :uint16)
174+(ffi/defcfn checksum-method-moqoriginconsumer-announced "uniffi_moq_ffi_checksum_method_moqoriginconsumer_announced" [] :uint16)
175+(ffi/defcfn checksum-method-moqoriginconsumer-announced-broadcast "uniffi_moq_ffi_checksum_method_moqoriginconsumer_announced_broadcast" [] :uint16)
176+(ffi/defcfn checksum-method-moqoriginconsumer-request-broadcast "uniffi_moq_ffi_checksum_method_moqoriginconsumer_request_broadcast" [] :uint16)
177+(ffi/defcfn checksum-method-moqorigindynamic-cancel "uniffi_moq_ffi_checksum_method_moqorigindynamic_cancel" [] :uint16)
178+(ffi/defcfn checksum-method-moqorigindynamic-requested-broadcast "uniffi_moq_ffi_checksum_method_moqorigindynamic_requested_broadcast" [] :uint16)
179+(ffi/defcfn checksum-method-moqoriginproducer-consume "uniffi_moq_ffi_checksum_method_moqoriginproducer_consume" [] :uint16)
180+(ffi/defcfn checksum-method-moqoriginproducer-create-broadcast "uniffi_moq_ffi_checksum_method_moqoriginproducer_create_broadcast" [] :uint16)
181+(ffi/defcfn checksum-method-moqoriginproducer-dynamic "uniffi_moq_ffi_checksum_method_moqoriginproducer_dynamic" [] :uint16)
182+(ffi/defcfn checksum-method-moqrequest-accept "uniffi_moq_ffi_checksum_method_moqrequest_accept" [] :uint16)
183+(ffi/defcfn checksum-method-moqrequest-cancel "uniffi_moq_ffi_checksum_method_moqrequest_cancel" [] :uint16)
184+(ffi/defcfn checksum-method-moqrequest-path "uniffi_moq_ffi_checksum_method_moqrequest_path" [] :uint16)
185+(ffi/defcfn checksum-method-moqrequest-query "uniffi_moq_ffi_checksum_method_moqrequest_query" [] :uint16)
186+(ffi/defcfn checksum-method-moqrequest-reject "uniffi_moq_ffi_checksum_method_moqrequest_reject" [] :uint16)
187+(ffi/defcfn checksum-method-moqrequest-set-consume "uniffi_moq_ffi_checksum_method_moqrequest_set_consume" [] :uint16)
188+(ffi/defcfn checksum-method-moqrequest-set-publish "uniffi_moq_ffi_checksum_method_moqrequest_set_publish" [] :uint16)
189+(ffi/defcfn checksum-method-moqrequest-transport "uniffi_moq_ffi_checksum_method_moqrequest_transport" [] :uint16)
190+(ffi/defcfn checksum-method-moqrequest-url "uniffi_moq_ffi_checksum_method_moqrequest_url" [] :uint16)
191+(ffi/defcfn checksum-method-moqroutewatch-cancel "uniffi_moq_ffi_checksum_method_moqroutewatch_cancel" [] :uint16)
192+(ffi/defcfn checksum-method-moqroutewatch-next "uniffi_moq_ffi_checksum_method_moqroutewatch_next" [] :uint16)
193+(ffi/defcfn checksum-method-moqserver-accept "uniffi_moq_ffi_checksum_method_moqserver_accept" [] :uint16)
194+(ffi/defcfn checksum-method-moqserver-cancel "uniffi_moq_ffi_checksum_method_moqserver_cancel" [] :uint16)
195+(ffi/defcfn checksum-method-moqserver-cert-fingerprints "uniffi_moq_ffi_checksum_method_moqserver_cert_fingerprints" [] :uint16)
196+(ffi/defcfn checksum-method-moqserver-listen "uniffi_moq_ffi_checksum_method_moqserver_listen" [] :uint16)
197+(ffi/defcfn checksum-method-moqserver-set-bind "uniffi_moq_ffi_checksum_method_moqserver_set_bind" [] :uint16)
198+(ffi/defcfn checksum-method-moqserver-set-consume "uniffi_moq_ffi_checksum_method_moqserver_set_consume" [] :uint16)
199+(ffi/defcfn checksum-method-moqserver-set-publish "uniffi_moq_ffi_checksum_method_moqserver_set_publish" [] :uint16)
200+(ffi/defcfn checksum-method-moqserver-set-tls-cert "uniffi_moq_ffi_checksum_method_moqserver_set_tls_cert" [] :uint16)
201+(ffi/defcfn checksum-method-moqserver-set-tls-generate "uniffi_moq_ffi_checksum_method_moqserver_set_tls_generate" [] :uint16)
202+(ffi/defcfn checksum-method-moqserver-set-tls-key "uniffi_moq_ffi_checksum_method_moqserver_set_tls_key" [] :uint16)
203+(ffi/defcfn checksum-method-moqsession-cancel "uniffi_moq_ffi_checksum_method_moqsession_cancel" [] :uint16)
204+(ffi/defcfn checksum-method-moqsession-closed "uniffi_moq_ffi_checksum_method_moqsession_closed" [] :uint16)
205+(ffi/defcfn checksum-method-moqsession-consumer "uniffi_moq_ffi_checksum_method_moqsession_consumer" [] :uint16)
206+(ffi/defcfn checksum-method-moqsession-publisher "uniffi_moq_ffi_checksum_method_moqsession_publisher" [] :uint16)
207+(ffi/defcfn checksum-method-moqsession-shutdown "uniffi_moq_ffi_checksum_method_moqsession_shutdown" [] :uint16)
208+(ffi/defcfn checksum-method-moqsession-stats "uniffi_moq_ffi_checksum_method_moqsession_stats" [] :uint16)
209+(ffi/defcfn checksum-method-moqtrackconsumer-cancel "uniffi_moq_ffi_checksum_method_moqtrackconsumer_cancel" [] :uint16)
210+(ffi/defcfn checksum-method-moqtrackconsumer-info "uniffi_moq_ffi_checksum_method_moqtrackconsumer_info" [] :uint16)
211+(ffi/defcfn checksum-method-moqtrackconsumer-next-group "uniffi_moq_ffi_checksum_method_moqtrackconsumer_next_group" [] :uint16)
212+(ffi/defcfn checksum-method-moqtrackconsumer-read-frame "uniffi_moq_ffi_checksum_method_moqtrackconsumer_read_frame" [] :uint16)
213+(ffi/defcfn checksum-method-moqtrackconsumer-recv-datagram "uniffi_moq_ffi_checksum_method_moqtrackconsumer_recv_datagram" [] :uint16)
214+(ffi/defcfn checksum-method-moqtrackconsumer-recv-group "uniffi_moq_ffi_checksum_method_moqtrackconsumer_recv_group" [] :uint16)
215+(ffi/defcfn checksum-method-moqtrackconsumer-update "uniffi_moq_ffi_checksum_method_moqtrackconsumer_update" [] :uint16)
216+(ffi/defcfn checksum-method-moqtrackdynamic-cancel "uniffi_moq_ffi_checksum_method_moqtrackdynamic_cancel" [] :uint16)
217+(ffi/defcfn checksum-method-moqtrackdynamic-requested-group "uniffi_moq_ffi_checksum_method_moqtrackdynamic_requested_group" [] :uint16)
218+(ffi/defcfn checksum-method-moqtrackproducer-abort "uniffi_moq_ffi_checksum_method_moqtrackproducer_abort" [] :uint16)
219+(ffi/defcfn checksum-method-moqtrackproducer-append-datagram "uniffi_moq_ffi_checksum_method_moqtrackproducer_append_datagram" [] :uint16)
220+(ffi/defcfn checksum-method-moqtrackproducer-append-group "uniffi_moq_ffi_checksum_method_moqtrackproducer_append_group" [] :uint16)
221+(ffi/defcfn checksum-method-moqtrackproducer-consume "uniffi_moq_ffi_checksum_method_moqtrackproducer_consume" [] :uint16)
222+(ffi/defcfn checksum-method-moqtrackproducer-create-group "uniffi_moq_ffi_checksum_method_moqtrackproducer_create_group" [] :uint16)
223+(ffi/defcfn checksum-method-moqtrackproducer-dynamic "uniffi_moq_ffi_checksum_method_moqtrackproducer_dynamic" [] :uint16)
224+(ffi/defcfn checksum-method-moqtrackproducer-finish "uniffi_moq_ffi_checksum_method_moqtrackproducer_finish" [] :uint16)
225+(ffi/defcfn checksum-method-moqtrackproducer-finish-at "uniffi_moq_ffi_checksum_method_moqtrackproducer_finish_at" [] :uint16)
226+(ffi/defcfn checksum-method-moqtrackproducer-name "uniffi_moq_ffi_checksum_method_moqtrackproducer_name" [] :uint16)
227+(ffi/defcfn checksum-method-moqtrackproducer-unused "uniffi_moq_ffi_checksum_method_moqtrackproducer_unused" [] :uint16)
228+(ffi/defcfn checksum-method-moqtrackproducer-used "uniffi_moq_ffi_checksum_method_moqtrackproducer_used" [] :uint16)
229+(ffi/defcfn checksum-method-moqtrackproducer-write-frame "uniffi_moq_ffi_checksum_method_moqtrackproducer_write_frame" [] :uint16)
230+(ffi/defcfn checksum-method-moqtrackrequest-abort "uniffi_moq_ffi_checksum_method_moqtrackrequest_abort" [] :uint16)
231+(ffi/defcfn checksum-method-moqtrackrequest-accept "uniffi_moq_ffi_checksum_method_moqtrackrequest_accept" [] :uint16)
232+(ffi/defcfn checksum-method-moqtrackrequest-dynamic "uniffi_moq_ffi_checksum_method_moqtrackrequest_dynamic" [] :uint16)
233+(ffi/defcfn checksum-method-moqtrackrequest-name "uniffi_moq_ffi_checksum_method_moqtrackrequest_name" [] :uint16)
234+(ffi/defcfn clone-moqannounced "uniffi_moq_ffi_fn_clone_moqannounced" [:uint64 :pointer] :uint64)
235+(ffi/defcfn clone-moqannouncedbroadcast "uniffi_moq_ffi_fn_clone_moqannouncedbroadcast" [:uint64 :pointer] :uint64)
236+(ffi/defcfn clone-moqannouncement "uniffi_moq_ffi_fn_clone_moqannouncement" [:uint64 :pointer] :uint64)
237+(ffi/defcfn clone-moqbroadcastconsumer "uniffi_moq_ffi_fn_clone_moqbroadcastconsumer" [:uint64 :pointer] :uint64)
238+(ffi/defcfn clone-moqbroadcastdynamic "uniffi_moq_ffi_fn_clone_moqbroadcastdynamic" [:uint64 :pointer] :uint64)
239+(ffi/defcfn clone-moqbroadcastproducer "uniffi_moq_ffi_fn_clone_moqbroadcastproducer" [:uint64 :pointer] :uint64)
240+(ffi/defcfn clone-moqbroadcastrequest "uniffi_moq_ffi_fn_clone_moqbroadcastrequest" [:uint64 :pointer] :uint64)
241+(ffi/defcfn clone-moqcatalogconsumer "uniffi_moq_ffi_fn_clone_moqcatalogconsumer" [:uint64 :pointer] :uint64)
242+(ffi/defcfn clone-moqclient "uniffi_moq_ffi_fn_clone_moqclient" [:uint64 :pointer] :uint64)
243+(ffi/defcfn clone-moqgroupconsumer "uniffi_moq_ffi_fn_clone_moqgroupconsumer" [:uint64 :pointer] :uint64)
244+(ffi/defcfn clone-moqgroupproducer "uniffi_moq_ffi_fn_clone_moqgroupproducer" [:uint64 :pointer] :uint64)
245+(ffi/defcfn clone-moqgrouprequest "uniffi_moq_ffi_fn_clone_moqgrouprequest" [:uint64 :pointer] :uint64)
246+(ffi/defcfn clone-moqjsonsnapshotconsumer "uniffi_moq_ffi_fn_clone_moqjsonsnapshotconsumer" [:uint64 :pointer] :uint64)
247+(ffi/defcfn clone-moqjsonsnapshotproducer "uniffi_moq_ffi_fn_clone_moqjsonsnapshotproducer" [:uint64 :pointer] :uint64)
248+(ffi/defcfn clone-moqjsonstreamconsumer "uniffi_moq_ffi_fn_clone_moqjsonstreamconsumer" [:uint64 :pointer] :uint64)
249+(ffi/defcfn clone-moqjsonstreamproducer "uniffi_moq_ffi_fn_clone_moqjsonstreamproducer" [:uint64 :pointer] :uint64)
250+(ffi/defcfn clone-moqmediaconsumer "uniffi_moq_ffi_fn_clone_moqmediaconsumer" [:uint64 :pointer] :uint64)
251+(ffi/defcfn clone-moqmediagroupconsumer "uniffi_moq_ffi_fn_clone_moqmediagroupconsumer" [:uint64 :pointer] :uint64)
252+(ffi/defcfn clone-moqmediaproducer "uniffi_moq_ffi_fn_clone_moqmediaproducer" [:uint64 :pointer] :uint64)
253+(ffi/defcfn clone-moqmediastreamproducer "uniffi_moq_ffi_fn_clone_moqmediastreamproducer" [:uint64 :pointer] :uint64)
254+(ffi/defcfn clone-moqoriginconsumer "uniffi_moq_ffi_fn_clone_moqoriginconsumer" [:uint64 :pointer] :uint64)
255+(ffi/defcfn clone-moqorigindynamic "uniffi_moq_ffi_fn_clone_moqorigindynamic" [:uint64 :pointer] :uint64)
256+(ffi/defcfn clone-moqoriginproducer "uniffi_moq_ffi_fn_clone_moqoriginproducer" [:uint64 :pointer] :uint64)
257+(ffi/defcfn clone-moqrequest "uniffi_moq_ffi_fn_clone_moqrequest" [:uint64 :pointer] :uint64)
258+(ffi/defcfn clone-moqroutewatch "uniffi_moq_ffi_fn_clone_moqroutewatch" [:uint64 :pointer] :uint64)
259+(ffi/defcfn clone-moqserver "uniffi_moq_ffi_fn_clone_moqserver" [:uint64 :pointer] :uint64)
260+(ffi/defcfn clone-moqsession "uniffi_moq_ffi_fn_clone_moqsession" [:uint64 :pointer] :uint64)
261+(ffi/defcfn clone-moqtrackconsumer "uniffi_moq_ffi_fn_clone_moqtrackconsumer" [:uint64 :pointer] :uint64)
262+(ffi/defcfn clone-moqtrackdynamic "uniffi_moq_ffi_fn_clone_moqtrackdynamic" [:uint64 :pointer] :uint64)
263+(ffi/defcfn clone-moqtrackproducer "uniffi_moq_ffi_fn_clone_moqtrackproducer" [:uint64 :pointer] :uint64)
264+(ffi/defcfn clone-moqtrackrequest "uniffi_moq_ffi_fn_clone_moqtrackrequest" [:uint64 :pointer] :uint64)
265+(ffi/defcfn constructor-moqbroadcastproducer-new "uniffi_moq_ffi_fn_constructor_moqbroadcastproducer_new" [:pointer] :uint64)
266+(ffi/defcfn constructor-moqclient-new "uniffi_moq_ffi_fn_constructor_moqclient_new" [:pointer] :uint64)
267+(ffi/defcfn constructor-moqoriginproducer-new "uniffi_moq_ffi_fn_constructor_moqoriginproducer_new" [[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
268+(ffi/defcfn constructor-moqserver-new "uniffi_moq_ffi_fn_constructor_moqserver_new" [:pointer] :uint64)
269+(ffi/defcfn free-moqannounced "uniffi_moq_ffi_fn_free_moqannounced" [:uint64 :pointer] :void)
270+(ffi/defcfn free-moqannouncedbroadcast "uniffi_moq_ffi_fn_free_moqannouncedbroadcast" [:uint64 :pointer] :void)
271+(ffi/defcfn free-moqannouncement "uniffi_moq_ffi_fn_free_moqannouncement" [:uint64 :pointer] :void)
272+(ffi/defcfn free-moqbroadcastconsumer "uniffi_moq_ffi_fn_free_moqbroadcastconsumer" [:uint64 :pointer] :void)
273+(ffi/defcfn free-moqbroadcastdynamic "uniffi_moq_ffi_fn_free_moqbroadcastdynamic" [:uint64 :pointer] :void)
274+(ffi/defcfn free-moqbroadcastproducer "uniffi_moq_ffi_fn_free_moqbroadcastproducer" [:uint64 :pointer] :void)
275+(ffi/defcfn free-moqbroadcastrequest "uniffi_moq_ffi_fn_free_moqbroadcastrequest" [:uint64 :pointer] :void)
276+(ffi/defcfn free-moqcatalogconsumer "uniffi_moq_ffi_fn_free_moqcatalogconsumer" [:uint64 :pointer] :void)
277+(ffi/defcfn free-moqclient "uniffi_moq_ffi_fn_free_moqclient" [:uint64 :pointer] :void)
278+(ffi/defcfn free-moqgroupconsumer "uniffi_moq_ffi_fn_free_moqgroupconsumer" [:uint64 :pointer] :void)
279+(ffi/defcfn free-moqgroupproducer "uniffi_moq_ffi_fn_free_moqgroupproducer" [:uint64 :pointer] :void)
280+(ffi/defcfn free-moqgrouprequest "uniffi_moq_ffi_fn_free_moqgrouprequest" [:uint64 :pointer] :void)
281+(ffi/defcfn free-moqjsonsnapshotconsumer "uniffi_moq_ffi_fn_free_moqjsonsnapshotconsumer" [:uint64 :pointer] :void)
282+(ffi/defcfn free-moqjsonsnapshotproducer "uniffi_moq_ffi_fn_free_moqjsonsnapshotproducer" [:uint64 :pointer] :void)
283+(ffi/defcfn free-moqjsonstreamconsumer "uniffi_moq_ffi_fn_free_moqjsonstreamconsumer" [:uint64 :pointer] :void)
284+(ffi/defcfn free-moqjsonstreamproducer "uniffi_moq_ffi_fn_free_moqjsonstreamproducer" [:uint64 :pointer] :void)
285+(ffi/defcfn free-moqmediaconsumer "uniffi_moq_ffi_fn_free_moqmediaconsumer" [:uint64 :pointer] :void)
286+(ffi/defcfn free-moqmediagroupconsumer "uniffi_moq_ffi_fn_free_moqmediagroupconsumer" [:uint64 :pointer] :void)
287+(ffi/defcfn free-moqmediaproducer "uniffi_moq_ffi_fn_free_moqmediaproducer" [:uint64 :pointer] :void)
288+(ffi/defcfn free-moqmediastreamproducer "uniffi_moq_ffi_fn_free_moqmediastreamproducer" [:uint64 :pointer] :void)
289+(ffi/defcfn free-moqoriginconsumer "uniffi_moq_ffi_fn_free_moqoriginconsumer" [:uint64 :pointer] :void)
290+(ffi/defcfn free-moqorigindynamic "uniffi_moq_ffi_fn_free_moqorigindynamic" [:uint64 :pointer] :void)
291+(ffi/defcfn free-moqoriginproducer "uniffi_moq_ffi_fn_free_moqoriginproducer" [:uint64 :pointer] :void)
292+(ffi/defcfn free-moqrequest "uniffi_moq_ffi_fn_free_moqrequest" [:uint64 :pointer] :void)
293+(ffi/defcfn free-moqroutewatch "uniffi_moq_ffi_fn_free_moqroutewatch" [:uint64 :pointer] :void)
294+(ffi/defcfn free-moqserver "uniffi_moq_ffi_fn_free_moqserver" [:uint64 :pointer] :void)
295+(ffi/defcfn free-moqsession "uniffi_moq_ffi_fn_free_moqsession" [:uint64 :pointer] :void)
296+(ffi/defcfn free-moqtrackconsumer "uniffi_moq_ffi_fn_free_moqtrackconsumer" [:uint64 :pointer] :void)
297+(ffi/defcfn free-moqtrackdynamic "uniffi_moq_ffi_fn_free_moqtrackdynamic" [:uint64 :pointer] :void)
298+(ffi/defcfn free-moqtrackproducer "uniffi_moq_ffi_fn_free_moqtrackproducer" [:uint64 :pointer] :void)
299+(ffi/defcfn free-moqtrackrequest "uniffi_moq_ffi_fn_free_moqtrackrequest" [:uint64 :pointer] :void)
300+(ffi/defcfn func-moq-log-level "uniffi_moq_ffi_fn_func_moq_log_level" [[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
301+(ffi/defcfn method-moqannounced-cancel "uniffi_moq_ffi_fn_method_moqannounced_cancel" [:uint64 :pointer] :void)
302+(ffi/defcfn method-moqannounced-next "uniffi_moq_ffi_fn_method_moqannounced_next" [:uint64] :uint64)
303+(ffi/defcfn method-moqannouncedbroadcast-available "uniffi_moq_ffi_fn_method_moqannouncedbroadcast_available" [:uint64] :uint64)
304+(ffi/defcfn method-moqannouncedbroadcast-cancel "uniffi_moq_ffi_fn_method_moqannouncedbroadcast_cancel" [:uint64 :pointer] :void)
305+(ffi/defcfn method-moqannouncement-broadcast "uniffi_moq_ffi_fn_method_moqannouncement_broadcast" [:uint64 :pointer] :uint64)
306+(ffi/defcfn method-moqannouncement-path "uniffi_moq_ffi_fn_method_moqannouncement_path" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
307+(ffi/defcfn method-moqbroadcastconsumer-fetch-group "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_fetch_group" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
308+(ffi/defcfn method-moqbroadcastconsumer-fetch-media-group "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_fetch_media_group" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
309+(ffi/defcfn method-moqbroadcastconsumer-route "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_route" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
310+(ffi/defcfn method-moqbroadcastconsumer-route-updates "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_route_updates" [:uint64 :pointer] :uint64)
311+(ffi/defcfn method-moqbroadcastconsumer-subscribe-catalog "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_catalog" [:uint64] :uint64)
312+(ffi/defcfn method-moqbroadcastconsumer-subscribe-json-snapshot "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_json_snapshot" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
313+(ffi/defcfn method-moqbroadcastconsumer-subscribe-json-stream "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_json_stream" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
314+(ffi/defcfn method-moqbroadcastconsumer-subscribe-media "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_media" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
315+(ffi/defcfn method-moqbroadcastconsumer-subscribe-track "uniffi_moq_ffi_fn_method_moqbroadcastconsumer_subscribe_track" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
316+(ffi/defcfn method-moqbroadcastdynamic-cancel "uniffi_moq_ffi_fn_method_moqbroadcastdynamic_cancel" [:uint64 :pointer] :void)
317+(ffi/defcfn method-moqbroadcastdynamic-requested-track "uniffi_moq_ffi_fn_method_moqbroadcastdynamic_requested_track" [:uint64] :uint64)
318+(ffi/defcfn method-moqbroadcastproducer-consume "uniffi_moq_ffi_fn_method_moqbroadcastproducer_consume" [:uint64 :pointer] :uint64)
319+(ffi/defcfn method-moqbroadcastproducer-dynamic "uniffi_moq_ffi_fn_method_moqbroadcastproducer_dynamic" [:uint64 :pointer] :uint64)
320+(ffi/defcfn method-moqbroadcastproducer-finish "uniffi_moq_ffi_fn_method_moqbroadcastproducer_finish" [:uint64 :pointer] :void)
321+(ffi/defcfn method-moqbroadcastproducer-publish-json-snapshot "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_json_snapshot" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
322+(ffi/defcfn method-moqbroadcastproducer-publish-json-stream "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_json_stream" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
323+(ffi/defcfn method-moqbroadcastproducer-publish-media "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_media" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
324+(ffi/defcfn method-moqbroadcastproducer-publish-media-on-track "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_media_on_track" [:uint64 :uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
325+(ffi/defcfn method-moqbroadcastproducer-publish-media-stream "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_media_stream" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
326+(ffi/defcfn method-moqbroadcastproducer-publish-track "uniffi_moq_ffi_fn_method_moqbroadcastproducer_publish_track" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
327+(ffi/defcfn method-moqbroadcastproducer-remove-catalog-section "uniffi_moq_ffi_fn_method_moqbroadcastproducer_remove_catalog_section" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
328+(ffi/defcfn method-moqbroadcastproducer-set-announce "uniffi_moq_ffi_fn_method_moqbroadcastproducer_set_announce" [:uint64 :int8 :pointer] :void)
329+(ffi/defcfn method-moqbroadcastproducer-set-catalog-section "uniffi_moq_ffi_fn_method_moqbroadcastproducer_set_catalog_section" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
330+(ffi/defcfn method-moqbroadcastproducer-set-route "uniffi_moq_ffi_fn_method_moqbroadcastproducer_set_route" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
331+(ffi/defcfn method-moqbroadcastproducer-set-video-properties "uniffi_moq_ffi_fn_method_moqbroadcastproducer_set_video_properties" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
332+(ffi/defcfn method-moqbroadcastrequest-abort "uniffi_moq_ffi_fn_method_moqbroadcastrequest_abort" [:uint64 :uint16 :pointer] :void)
333+(ffi/defcfn method-moqbroadcastrequest-accept "uniffi_moq_ffi_fn_method_moqbroadcastrequest_accept" [:uint64 :uint64 :pointer] :void)
334+(ffi/defcfn method-moqbroadcastrequest-path "uniffi_moq_ffi_fn_method_moqbroadcastrequest_path" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
335+(ffi/defcfn method-moqcatalogconsumer-cancel "uniffi_moq_ffi_fn_method_moqcatalogconsumer_cancel" [:uint64 :pointer] :void)
336+(ffi/defcfn method-moqcatalogconsumer-next "uniffi_moq_ffi_fn_method_moqcatalogconsumer_next" [:uint64] :uint64)
337+(ffi/defcfn method-moqclient-cancel "uniffi_moq_ffi_fn_method_moqclient_cancel" [:uint64 :pointer] :void)
338+(ffi/defcfn method-moqclient-connect "uniffi_moq_ffi_fn_method_moqclient_connect" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
339+(ffi/defcfn method-moqclient-set-bind "uniffi_moq_ffi_fn_method_moqclient_set_bind" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
340+(ffi/defcfn method-moqclient-set-consume "uniffi_moq_ffi_fn_method_moqclient_set_consume" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
341+(ffi/defcfn method-moqclient-set-publish "uniffi_moq_ffi_fn_method_moqclient_set_publish" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
342+(ffi/defcfn method-moqclient-set-tls-cert "uniffi_moq_ffi_fn_method_moqclient_set_tls_cert" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
343+(ffi/defcfn method-moqclient-set-tls-disable-verify "uniffi_moq_ffi_fn_method_moqclient_set_tls_disable_verify" [:uint64 :int8 :pointer] :void)
344+(ffi/defcfn method-moqclient-set-tls-fingerprints "uniffi_moq_ffi_fn_method_moqclient_set_tls_fingerprints" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
345+(ffi/defcfn method-moqclient-set-tls-key "uniffi_moq_ffi_fn_method_moqclient_set_tls_key" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
346+(ffi/defcfn method-moqclient-set-tls-roots "uniffi_moq_ffi_fn_method_moqclient_set_tls_roots" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
347+(ffi/defcfn method-moqclient-set-tls-system-roots "uniffi_moq_ffi_fn_method_moqclient_set_tls_system_roots" [:uint64 :int8 :pointer] :void)
348+(ffi/defcfn method-moqgroupconsumer-cancel "uniffi_moq_ffi_fn_method_moqgroupconsumer_cancel" [:uint64 :pointer] :void)
349+(ffi/defcfn method-moqgroupconsumer-read-frame "uniffi_moq_ffi_fn_method_moqgroupconsumer_read_frame" [:uint64] :uint64)
350+(ffi/defcfn method-moqgroupconsumer-sequence "uniffi_moq_ffi_fn_method_moqgroupconsumer_sequence" [:uint64 :pointer] :uint64)
351+(ffi/defcfn method-moqgroupproducer-abort "uniffi_moq_ffi_fn_method_moqgroupproducer_abort" [:uint64 :uint16 :pointer] :void)
352+(ffi/defcfn method-moqgroupproducer-consume "uniffi_moq_ffi_fn_method_moqgroupproducer_consume" [:uint64 :pointer] :uint64)
353+(ffi/defcfn method-moqgroupproducer-finish "uniffi_moq_ffi_fn_method_moqgroupproducer_finish" [:uint64 :pointer] :void)
354+(ffi/defcfn method-moqgroupproducer-sequence "uniffi_moq_ffi_fn_method_moqgroupproducer_sequence" [:uint64 :pointer] :uint64)
355+(ffi/defcfn method-moqgroupproducer-write-frame "uniffi_moq_ffi_fn_method_moqgroupproducer_write_frame" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
356+(ffi/defcfn method-moqgrouprequest-abort "uniffi_moq_ffi_fn_method_moqgrouprequest_abort" [:uint64 :uint16 :pointer] :void)
357+(ffi/defcfn method-moqgrouprequest-accept "uniffi_moq_ffi_fn_method_moqgrouprequest_accept" [:uint64 :pointer] :uint64)
358+(ffi/defcfn method-moqgrouprequest-priority "uniffi_moq_ffi_fn_method_moqgrouprequest_priority" [:uint64 :pointer] :uint8)
359+(ffi/defcfn method-moqgrouprequest-sequence "uniffi_moq_ffi_fn_method_moqgrouprequest_sequence" [:uint64 :pointer] :uint64)
360+(ffi/defcfn method-moqjsonsnapshotconsumer-cancel "uniffi_moq_ffi_fn_method_moqjsonsnapshotconsumer_cancel" [:uint64 :pointer] :void)
361+(ffi/defcfn method-moqjsonsnapshotconsumer-next "uniffi_moq_ffi_fn_method_moqjsonsnapshotconsumer_next" [:uint64] :uint64)
362+(ffi/defcfn method-moqjsonsnapshotproducer-finish "uniffi_moq_ffi_fn_method_moqjsonsnapshotproducer_finish" [:uint64 :pointer] :void)
363+(ffi/defcfn method-moqjsonsnapshotproducer-update "uniffi_moq_ffi_fn_method_moqjsonsnapshotproducer_update" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
364+(ffi/defcfn method-moqjsonstreamconsumer-cancel "uniffi_moq_ffi_fn_method_moqjsonstreamconsumer_cancel" [:uint64 :pointer] :void)
365+(ffi/defcfn method-moqjsonstreamconsumer-next "uniffi_moq_ffi_fn_method_moqjsonstreamconsumer_next" [:uint64] :uint64)
366+(ffi/defcfn method-moqjsonstreamproducer-append "uniffi_moq_ffi_fn_method_moqjsonstreamproducer_append" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
367+(ffi/defcfn method-moqjsonstreamproducer-finish "uniffi_moq_ffi_fn_method_moqjsonstreamproducer_finish" [:uint64 :pointer] :void)
368+(ffi/defcfn method-moqmediaconsumer-cancel "uniffi_moq_ffi_fn_method_moqmediaconsumer_cancel" [:uint64 :pointer] :void)
369+(ffi/defcfn method-moqmediaconsumer-next "uniffi_moq_ffi_fn_method_moqmediaconsumer_next" [:uint64] :uint64)
370+(ffi/defcfn method-moqmediagroupconsumer-cancel "uniffi_moq_ffi_fn_method_moqmediagroupconsumer_cancel" [:uint64 :pointer] :void)
371+(ffi/defcfn method-moqmediagroupconsumer-next "uniffi_moq_ffi_fn_method_moqmediagroupconsumer_next" [:uint64] :uint64)
372+(ffi/defcfn method-moqmediagroupconsumer-sequence "uniffi_moq_ffi_fn_method_moqmediagroupconsumer_sequence" [:uint64 :pointer] :uint64)
373+(ffi/defcfn method-moqmediaproducer-finish "uniffi_moq_ffi_fn_method_moqmediaproducer_finish" [:uint64 :pointer] :void)
374+(ffi/defcfn method-moqmediaproducer-name "uniffi_moq_ffi_fn_method_moqmediaproducer_name" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
375+(ffi/defcfn method-moqmediaproducer-unused "uniffi_moq_ffi_fn_method_moqmediaproducer_unused" [:uint64] :uint64)
376+(ffi/defcfn method-moqmediaproducer-used "uniffi_moq_ffi_fn_method_moqmediaproducer_used" [:uint64] :uint64)
377+(ffi/defcfn method-moqmediaproducer-write-frame "uniffi_moq_ffi_fn_method_moqmediaproducer_write_frame" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
378+(ffi/defcfn method-moqmediastreamproducer-finish "uniffi_moq_ffi_fn_method_moqmediastreamproducer_finish" [:uint64 :pointer] :void)
379+(ffi/defcfn method-moqmediastreamproducer-write "uniffi_moq_ffi_fn_method_moqmediastreamproducer_write" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
380+(ffi/defcfn method-moqoriginconsumer-announced "uniffi_moq_ffi_fn_method_moqoriginconsumer_announced" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
381+(ffi/defcfn method-moqoriginconsumer-announced-broadcast "uniffi_moq_ffi_fn_method_moqoriginconsumer_announced_broadcast" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
382+(ffi/defcfn method-moqoriginconsumer-request-broadcast "uniffi_moq_ffi_fn_method_moqoriginconsumer_request_broadcast" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]] :uint64)
383+(ffi/defcfn method-moqorigindynamic-cancel "uniffi_moq_ffi_fn_method_moqorigindynamic_cancel" [:uint64 :pointer] :void)
384+(ffi/defcfn method-moqorigindynamic-requested-broadcast "uniffi_moq_ffi_fn_method_moqorigindynamic_requested_broadcast" [:uint64] :uint64)
385+(ffi/defcfn method-moqoriginproducer-consume "uniffi_moq_ffi_fn_method_moqoriginproducer_consume" [:uint64 :pointer] :uint64)
386+(ffi/defcfn method-moqoriginproducer-create-broadcast "uniffi_moq_ffi_fn_method_moqoriginproducer_create_broadcast" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
387+(ffi/defcfn method-moqoriginproducer-dynamic "uniffi_moq_ffi_fn_method_moqoriginproducer_dynamic" [:uint64 :pointer] :uint64)
388+(ffi/defcfn method-moqrequest-accept "uniffi_moq_ffi_fn_method_moqrequest_accept" [:uint64] :uint64)
389+(ffi/defcfn method-moqrequest-cancel "uniffi_moq_ffi_fn_method_moqrequest_cancel" [:uint64 :pointer] :void)
390+(ffi/defcfn method-moqrequest-path "uniffi_moq_ffi_fn_method_moqrequest_path" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
391+(ffi/defcfn method-moqrequest-query "uniffi_moq_ffi_fn_method_moqrequest_query" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
392+(ffi/defcfn method-moqrequest-reject "uniffi_moq_ffi_fn_method_moqrequest_reject" [:uint64 :uint16] :uint64)
393+(ffi/defcfn method-moqrequest-set-consume "uniffi_moq_ffi_fn_method_moqrequest_set_consume" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
394+(ffi/defcfn method-moqrequest-set-publish "uniffi_moq_ffi_fn_method_moqrequest_set_publish" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
395+(ffi/defcfn method-moqrequest-transport "uniffi_moq_ffi_fn_method_moqrequest_transport" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
396+(ffi/defcfn method-moqrequest-url "uniffi_moq_ffi_fn_method_moqrequest_url" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
397+(ffi/defcfn method-moqroutewatch-cancel "uniffi_moq_ffi_fn_method_moqroutewatch_cancel" [:uint64 :pointer] :void)
398+(ffi/defcfn method-moqroutewatch-next "uniffi_moq_ffi_fn_method_moqroutewatch_next" [:uint64] :uint64)
399+(ffi/defcfn method-moqserver-accept "uniffi_moq_ffi_fn_method_moqserver_accept" [:uint64] :uint64)
400+(ffi/defcfn method-moqserver-cancel "uniffi_moq_ffi_fn_method_moqserver_cancel" [:uint64 :pointer] :void)
401+(ffi/defcfn method-moqserver-cert-fingerprints "uniffi_moq_ffi_fn_method_moqserver_cert_fingerprints" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
402+(ffi/defcfn method-moqserver-listen "uniffi_moq_ffi_fn_method_moqserver_listen" [:uint64] :uint64)
403+(ffi/defcfn method-moqserver-set-bind "uniffi_moq_ffi_fn_method_moqserver_set_bind" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
404+(ffi/defcfn method-moqserver-set-consume "uniffi_moq_ffi_fn_method_moqserver_set_consume" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
405+(ffi/defcfn method-moqserver-set-publish "uniffi_moq_ffi_fn_method_moqserver_set_publish" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
406+(ffi/defcfn method-moqserver-set-tls-cert "uniffi_moq_ffi_fn_method_moqserver_set_tls_cert" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
407+(ffi/defcfn method-moqserver-set-tls-generate "uniffi_moq_ffi_fn_method_moqserver_set_tls_generate" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
408+(ffi/defcfn method-moqserver-set-tls-key "uniffi_moq_ffi_fn_method_moqserver_set_tls_key" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
409+(ffi/defcfn method-moqsession-cancel "uniffi_moq_ffi_fn_method_moqsession_cancel" [:uint64 :uint32 :pointer] :void)
410+(ffi/defcfn method-moqsession-closed "uniffi_moq_ffi_fn_method_moqsession_closed" [:uint64] :uint64)
411+(ffi/defcfn method-moqsession-consumer "uniffi_moq_ffi_fn_method_moqsession_consumer" [:uint64 :pointer] :uint64)
412+(ffi/defcfn method-moqsession-publisher "uniffi_moq_ffi_fn_method_moqsession_publisher" [:uint64 :pointer] :uint64)
413+(ffi/defcfn method-moqsession-shutdown "uniffi_moq_ffi_fn_method_moqsession_shutdown" [:uint64 :pointer] :void)
414+(ffi/defcfn method-moqsession-stats "uniffi_moq_ffi_fn_method_moqsession_stats" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
415+(ffi/defcfn method-moqtrackconsumer-cancel "uniffi_moq_ffi_fn_method_moqtrackconsumer_cancel" [:uint64 :pointer] :void)
416+(ffi/defcfn method-moqtrackconsumer-info "uniffi_moq_ffi_fn_method_moqtrackconsumer_info" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
417+(ffi/defcfn method-moqtrackconsumer-next-group "uniffi_moq_ffi_fn_method_moqtrackconsumer_next_group" [:uint64] :uint64)
418+(ffi/defcfn method-moqtrackconsumer-read-frame "uniffi_moq_ffi_fn_method_moqtrackconsumer_read_frame" [:uint64] :uint64)
419+(ffi/defcfn method-moqtrackconsumer-recv-datagram "uniffi_moq_ffi_fn_method_moqtrackconsumer_recv_datagram" [:uint64] :uint64)
420+(ffi/defcfn method-moqtrackconsumer-recv-group "uniffi_moq_ffi_fn_method_moqtrackconsumer_recv_group" [:uint64] :uint64)
421+(ffi/defcfn method-moqtrackconsumer-update "uniffi_moq_ffi_fn_method_moqtrackconsumer_update" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
422+(ffi/defcfn method-moqtrackdynamic-cancel "uniffi_moq_ffi_fn_method_moqtrackdynamic_cancel" [:uint64 :pointer] :void)
423+(ffi/defcfn method-moqtrackdynamic-requested-group "uniffi_moq_ffi_fn_method_moqtrackdynamic_requested_group" [:uint64] :uint64)
424+(ffi/defcfn method-moqtrackproducer-abort "uniffi_moq_ffi_fn_method_moqtrackproducer_abort" [:uint64 :uint16 :pointer] :void)
425+(ffi/defcfn method-moqtrackproducer-append-datagram "uniffi_moq_ffi_fn_method_moqtrackproducer_append_datagram" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
426+(ffi/defcfn method-moqtrackproducer-append-group "uniffi_moq_ffi_fn_method_moqtrackproducer_append_group" [:uint64 :pointer] :uint64)
427+(ffi/defcfn method-moqtrackproducer-consume "uniffi_moq_ffi_fn_method_moqtrackproducer_consume" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
428+(ffi/defcfn method-moqtrackproducer-create-group "uniffi_moq_ffi_fn_method_moqtrackproducer_create_group" [:uint64 :uint64 :pointer] :uint64)
429+(ffi/defcfn method-moqtrackproducer-dynamic "uniffi_moq_ffi_fn_method_moqtrackproducer_dynamic" [:uint64 :pointer] :uint64)
430+(ffi/defcfn method-moqtrackproducer-finish "uniffi_moq_ffi_fn_method_moqtrackproducer_finish" [:uint64 :pointer] :void)
431+(ffi/defcfn method-moqtrackproducer-finish-at "uniffi_moq_ffi_fn_method_moqtrackproducer_finish_at" [:uint64 :uint64 :pointer] :void)
432+(ffi/defcfn method-moqtrackproducer-name "uniffi_moq_ffi_fn_method_moqtrackproducer_name" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
433+(ffi/defcfn method-moqtrackproducer-unused "uniffi_moq_ffi_fn_method_moqtrackproducer_unused" [:uint64] :uint64)
434+(ffi/defcfn method-moqtrackproducer-used "uniffi_moq_ffi_fn_method_moqtrackproducer_used" [:uint64] :uint64)
435+(ffi/defcfn method-moqtrackproducer-write-frame "uniffi_moq_ffi_fn_method_moqtrackproducer_write_frame" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :void)
436+(ffi/defcfn method-moqtrackrequest-abort "uniffi_moq_ffi_fn_method_moqtrackrequest_abort" [:uint64 :uint16 :pointer] :void)
437+(ffi/defcfn method-moqtrackrequest-accept "uniffi_moq_ffi_fn_method_moqtrackrequest_accept" [:uint64 [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]] :pointer] :uint64)
438+(ffi/defcfn method-moqtrackrequest-dynamic "uniffi_moq_ffi_fn_method_moqtrackrequest_dynamic" [:uint64 :pointer] :uint64)
439+(ffi/defcfn method-moqtrackrequest-name "uniffi_moq_ffi_fn_method_moqtrackrequest_name" [:uint64 :pointer] [:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]])
added src/frq/moq/smoke.clj +74 -0
new file mode 100644
@@ -0,0 +1,74 @@
1+(ns frq.moq.smoke
2+ "The smallest round trip that proves the generated bindings are real.
3+
4+ Nothing in `frq.moq.*` has crossed the ABI until something does, and the
5+ failure modes here are not the kind that announce themselves: a RustBuffer
6+ whose fields are the wrong width reads as plausible garbage, and a handle
7+ freed twice corrupts an allocator some minutes later rather than at the call.
8+ So this checks, in order, the three things everything else assumes —
9+
10+ 1. the contract version, which is the object saying it is the one the
11+ bindings were generated from;
12+ 2. a handle's whole life — construct a MoqClient, then free it — which is
13+ the RustCallStatus out-parameter working in both directions;
14+ 3. a string out and back, which is the RustBuffer layout and the
15+ alloc/free ownership rule.
16+
17+ It deliberately does NOT connect. A connect is a future, a tokio worker and
18+ a network, and none of those tell you anything if the layouts are wrong.
19+
20+ just repl -m frq.moq.smoke"
21+ (:require [frq.moq.uniffi :as uniffi]
22+ [frq.moq.raw :as raw]
23+ [jolt.ffi :as ffi]))
24+
25+(defn- check-contract []
26+ (let [v (uniffi/check-abi!)]
27+ (println " contract version:" v "(expected" uniffi/expected-contract ")")
28+ true))
29+
30+(defn- check-handle
31+ "Construct and free a MoqClient.
32+
33+ `moqclient_new` is the one constructor that takes nothing but a status, so
34+ it isolates the status protocol from any argument lowering. The free is not
35+ a courtesy: it is the other half of the handle contract, and a binding that
36+ cannot free is a binding that leaks a QUIC endpoint per call."
37+ []
38+ (let [h (uniffi/with-out-status #(raw/constructor-moqclient-new %))]
39+ (println " moqclient_new ->" h)
40+ (when (zero? h)
41+ (throw (ex-info "moqclient_new answered a null handle" {})))
42+ (uniffi/with-out-status #(raw/free-moqclient h %))
43+ (println " free_moqclient ok")
44+ true))
45+
46+(defn- check-string
47+ "Send a string into a RustBuffer and read it back out.
48+
49+ The value is chosen to catch the two mistakes a length-counted buffer
50+ invites: multi-byte UTF-8 (a length in characters rather than bytes reads
51+ short) and a trailing character (a NUL-terminated read runs past the end)."
52+ []
53+ (let [s "moq://relay.example/ünïcode/✓"]
54+ (ffi/with-arena [a]
55+ (let [buf (ffi/alloc a (ffi/layout-size uniffi/rust-buffer))]
56+ (uniffi/lower-string buf s)
57+ (let [len (ffi/read-field buf uniffi/rust-buffer [:len])
58+ got (uniffi/lift-string buf)]
59+ (println " lowered" (count s) "chars ->" len "bytes in the buffer")
60+ (println " lifted " (pr-str got))
61+ (when-not (= s got)
62+ (throw (ex-info "string did not round trip"
63+ {:sent s :got got})))
64+ true)))))
65+
66+(defn -main [& _]
67+ (println "libmoq_ffi smoke test")
68+ (let [steps [["contract" check-contract]
69+ ["handle" check-handle]
70+ ["string" check-string]]]
71+ (doseq [[name f] steps]
72+ (println (str name ":"))
73+ (f))
74+ (println "all ok")))
new file mode 100644
@@ -0,0 +1,74 @@
1+(ns frq.moq.smoke
2+ "The smallest round trip that proves the generated bindings are real.
3+
4+ Nothing in `frq.moq.*` has crossed the ABI until something does, and the
5+ failure modes here are not the kind that announce themselves: a RustBuffer
6+ whose fields are the wrong width reads as plausible garbage, and a handle
7+ freed twice corrupts an allocator some minutes later rather than at the call.
8+ So this checks, in order, the three things everything else assumes —
9+
10+ 1. the contract version, which is the object saying it is the one the
11+ bindings were generated from;
12+ 2. a handle's whole life — construct a MoqClient, then free it — which is
13+ the RustCallStatus out-parameter working in both directions;
14+ 3. a string out and back, which is the RustBuffer layout and the
15+ alloc/free ownership rule.
16+
17+ It deliberately does NOT connect. A connect is a future, a tokio worker and
18+ a network, and none of those tell you anything if the layouts are wrong.
19+
20+ just repl -m frq.moq.smoke"
21+ (:require [frq.moq.uniffi :as uniffi]
22+ [frq.moq.raw :as raw]
23+ [jolt.ffi :as ffi]))
24+
25+(defn- check-contract []
26+ (let [v (uniffi/check-abi!)]
27+ (println " contract version:" v "(expected" uniffi/expected-contract ")")
28+ true))
29+
30+(defn- check-handle
31+ "Construct and free a MoqClient.
32+
33+ `moqclient_new` is the one constructor that takes nothing but a status, so
34+ it isolates the status protocol from any argument lowering. The free is not
35+ a courtesy: it is the other half of the handle contract, and a binding that
36+ cannot free is a binding that leaks a QUIC endpoint per call."
37+ []
38+ (let [h (uniffi/with-out-status #(raw/constructor-moqclient-new %))]
39+ (println " moqclient_new ->" h)
40+ (when (zero? h)
41+ (throw (ex-info "moqclient_new answered a null handle" {})))
42+ (uniffi/with-out-status #(raw/free-moqclient h %))
43+ (println " free_moqclient ok")
44+ true))
45+
46+(defn- check-string
47+ "Send a string into a RustBuffer and read it back out.
48+
49+ The value is chosen to catch the two mistakes a length-counted buffer
50+ invites: multi-byte UTF-8 (a length in characters rather than bytes reads
51+ short) and a trailing character (a NUL-terminated read runs past the end)."
52+ []
53+ (let [s "moq://relay.example/ünïcode/✓"]
54+ (ffi/with-arena [a]
55+ (let [buf (ffi/alloc a (ffi/layout-size uniffi/rust-buffer))]
56+ (uniffi/lower-string buf s)
57+ (let [len (ffi/read-field buf uniffi/rust-buffer [:len])
58+ got (uniffi/lift-string buf)]
59+ (println " lowered" (count s) "chars ->" len "bytes in the buffer")
60+ (println " lifted " (pr-str got))
61+ (when-not (= s got)
62+ (throw (ex-info "string did not round trip"
63+ {:sent s :got got})))
64+ true)))))
65+
66+(defn -main [& _]
67+ (println "libmoq_ffi smoke test")
68+ (let [steps [["contract" check-contract]
69+ ["handle" check-handle]
70+ ["string" check-string]]]
71+ (doseq [[name f] steps]
72+ (println (str name ":"))
73+ (f))
74+ (println "all ok")))
added src/frq/moq/uniffi.clj +266 -0
new file mode 100644
@@ -0,0 +1,266 @@
1+(ns frq.moq.uniffi
2+ "The UniFFI ABI, in jolt — the substrate every `frq.moq.*` binding sits on.
3+
4+ `libmoq_ffi` is not a hand-written C library. It is what UniFFI generates,
5+ and its shape is the same one UniFFI's Swift and Kotlin backends consume:
6+
7+ * **Values cross as `RustBuffer`** — a {capacity, len, data} triple, passed
8+ and returned BY VALUE. A string is its UTF-8 bytes in one; so is a lowered
9+ error. The buffer is Rust-owned and must go back through `rustbuffer_free`.
10+ * **Errors are an out-parameter.** Every fallible entry point takes a
11+ trailing `RustCallStatus *`, and the `code` byte in it says what happened:
12+ 0 succeeded, 1 threw (the lowered error is in `errorBuf`), 2 panicked (a
13+ message is in `errorBuf`).
14+ * **Objects are handles**, not pointers — a `uint64_t` with `clone_*` and
15+ `free_*` around it. A handle is cloned before each method call and freed
16+ once, which is what UniFFI's generated code does and why doing it by hand
17+ is the part to get right.
18+ * **Async is a future to be polled.** `connect` and friends return a future
19+ handle rather than a value: poll it with a continuation callback, and when
20+ the callback reports READY, `complete` it for the result and `free` it.
21+
22+ Two facts about the far side shape the async half here. The continuation is
23+ invoked from a tokio worker — a thread jolt did not start — so it is built in
24+ an `auto-arena` and marked `:collect-safe`, which is exactly the case that
25+ arena documents. And `frq.av`'s contract is that nothing calls back into the
26+ UI: the continuation therefore does the smallest possible thing, flipping a
27+ flag, and `settled?` is what a caller on the loop thread asks.
28+
29+ The version guard is not optional. UniFFI writes a contract version and a
30+ per-method checksum into the object, and a `libmoq_ffi` built from a
31+ different revision will have the same symbol names with different layouts
32+ behind them. `check-abi!` is called once at load; a mismatch is a hard error
33+ rather than a corrupted read some minutes into a call."
34+ (:require [jolt.ffi :as ffi]
35+ [frq.moq.raw :as raw]))
36+
37+;; --- the primitives ----------------------------------------------------------
38+;; UNIFFI_SHARED_HEADER_V4. These three are stable across uniffied crates —
39+;; the header carries a guard that refuses to mix versions, and these layouts
40+;; are that version's.
41+
42+(def rust-buffer
43+ (ffi/layout [:struct [[:capacity :uint64]
44+ [:len :uint64]
45+ [:data :pointer]]]))
46+
47+(def foreign-bytes
48+ (ffi/layout [:struct [[:len :int32]
49+ [:data :pointer]]]))
50+
51+(def rust-call-status
52+ (ffi/layout [:struct [[:code :int8]
53+ [:error-buf [:struct [[:capacity :uint64]
54+ [:len :uint64]
55+ [:data :pointer]]]]]]))
56+
57+;; `code` in a RustCallStatus.
58+(def ^:const status-ok 0)
59+(def ^:const status-error 1)
60+(def ^:const status-panic 2)
61+
62+;; What a continuation is handed. READY means `complete` will not block;
63+;; MAYBE-READY means poll again.
64+(def ^:const poll-ready 0)
65+(def ^:const poll-maybe-ready 1)
66+
67+;; --- the entry points -------------------------------------------------------
68+;; Not redeclared here. `frq.moq.raw` is generated from the object's own
69+;; embedded metadata and already declares all 403 of them, including these —
70+;; so this namespace binds behaviour to them rather than restating signatures
71+;; that a regeneration could move underneath it.
72+
73+;; --- errors ------------------------------------------------------------------
74+
75+;; Forward: `with-out-status` expands to a call to this, and jolt resolves the
76+;; expansion when it ANALYSES it rather than when it runs.
77+(declare throw-status!)
78+
79+(defmacro with-out-status
80+ "Run `f` with a zeroed RustCallStatus, then raise if it came back non-ok.
81+
82+ Every fallible entry point in the object takes one of these as its last
83+ argument, so this is the shape nearly every call in `frq.moq.*` wears. The
84+ status is confined: it lives exactly as long as the call."
85+ [f]
86+ `(ffi/with-arena [a#]
87+ (let [s# (ffi/alloc a# (ffi/layout-size rust-call-status))]
88+ (ffi/write s# rust-call-status {:code status-ok
89+ :error-buf {:capacity 0 :len 0
90+ :data ffi/null}})
91+ (let [v# (~f s#)]
92+ (if (= status-ok (ffi/read-field s# rust-call-status [:code]))
93+ v#
94+ (throw-status! s#))))))
95+
96+(defn- status-message
97+ "Read and RELEASE the lowered error sitting in a non-ok status.
98+
99+ Both `error` and `panic` put a RustBuffer in `errorBuf`, and both are the
100+ caller's to free — the difference is only what is inside. A panic's buffer is
101+ a bare UTF-8 message; an error's is the lowered `MoqError`, whose first bytes
102+ are a variant discriminant. Neither is decoded here: this namespace does not
103+ know MoqError's shape, so it reports the bytes it can and leaves lifting the
104+ variant to the binding that declared the type.
105+
106+ The free goes through a status of its own rather than `with-out-status`: this
107+ is already the error path, and a raise from freeing an error buffer would
108+ lose the error that got us here."
109+ [status-ptr]
110+ (let [len (ffi/read-field status-ptr rust-call-status [:error-buf :len])
111+ data (ffi/read-field status-ptr rust-call-status [:error-buf :data])
112+ text (when (and (pos? len) (not (ffi/null? data)))
113+ ;; Not ptr->string: the buffer is length-counted, not
114+ ;; NUL-terminated, and a lowered error may hold an interior zero.
115+ (ffi/read-bytes data len))]
116+ (ffi/with-arena [a]
117+ (let [free-status (ffi/alloc a (ffi/layout-size rust-call-status))]
118+ (ffi/write free-status rust-call-status
119+ {:code status-ok
120+ :error-buf {:capacity 0 :len 0 :data ffi/null}})
121+ (raw/rustbuffer-free (ffi/place status-ptr rust-call-status [:error-buf])
122+ free-status)))
123+ text))
124+
125+(defn- throw-status! [status-ptr]
126+ (let [code (ffi/read-field status-ptr rust-call-status [:code])
127+ msg (status-message status-ptr)]
128+ (throw (ex-info (if (= code status-panic)
129+ (str "libmoq_ffi panicked: " msg)
130+ (str "libmoq_ffi call failed: " msg))
131+ {:code code :message msg}))))
132+
133+;; --- strings -----------------------------------------------------------------
134+
135+(defn lower-string
136+ "Copy `s` into a Rust-owned RustBuffer, written into `dest`.
137+
138+ UniFFI lowers a bare String as its UTF-8 bytes with no length prefix — the
139+ buffer's own `len` is the length. `from_bytes` copies, so the ForeignBytes
140+ jolt hands over may live in a confined arena and die with this call.
141+
142+ The bytes come from `string->ptr`, which encodes UTF-8 and records the size
143+ it allocated; that size counts the NUL it appends, which is why the length
144+ handed to Rust is one less. A NUL is not part of the value here — a
145+ RustBuffer is length-counted, and including the terminator would append a
146+ zero byte to every string that crossed."
147+ [dest s]
148+ (ffi/with-arena [a]
149+ (let [p (ffi/string->ptr a s)
150+ n (max 0 (dec (ffi/size p)))
151+ fbs (ffi/alloc a (ffi/layout-size foreign-bytes))]
152+ (ffi/write fbs foreign-bytes {:len n :data p})
153+ (with-out-status #(raw/rustbuffer-from-bytes dest fbs %))
154+ dest)))
155+
156+(defn lift-string
157+ "Read a returned RustBuffer as a string and free it.
158+
159+ `read-bytes` decodes UTF-8 itself, so the length-counted bytes become a jolt
160+ string in one block move — no NUL is looked for, which is what a buffer that
161+ may hold an interior zero needs.
162+
163+ The buffer is Rust-owned, so it goes back through `rustbuffer_free` whether
164+ or not it held anything: a zero-length buffer still carries a capacity."
165+ [rb-ptr]
166+ (let [len (ffi/read-field rb-ptr rust-buffer [:len])
167+ data (ffi/read-field rb-ptr rust-buffer [:data])
168+ s (if (and (pos? len) (not (ffi/null? data)))
169+ (ffi/read-bytes data len)
170+ "")]
171+ (with-out-status #(raw/rustbuffer-free rb-ptr %))
172+ s))
173+
174+;; --- futures -----------------------------------------------------------------
175+
176+(defn- continuation
177+ "A `void (uint64_t data, int8_t poll_result)` for the far side to invoke.
178+
179+ Built in the auto-arena and `:collect-safe` on purpose: tokio calls this from
180+ a worker thread jolt never started, and no lexical scope on this side is the
181+ callback's lifetime — which is the case `ffi/auto-arena` exists for.
182+
183+ It does as little as a callback can. Recording the poll result into an atom
184+ is the whole body; nothing here touches glimmer, allocates a jolt value that
185+ outlives the call, or re-enters the object. `frq.av`'s rule that nothing
186+ calls back into the UI survives because the UI is never on this path — a
187+ caller on the loop thread reads the atom instead."
188+ [state]
189+ (ffi/callback (ffi/auto-arena)
190+ (fn [_data result] (reset! state (long result)))
191+ [:uint64 :int8] :void
192+ :collect-safe))
193+
194+(defn start-future
195+ "Begin polling `handle`, and answer a map the loop thread can interrogate.
196+
197+ `kind` picks the width family — :u64 for an object or integer result, :void
198+ for one that resolves to nothing, :rb for a value that arrives as a buffer.
199+ The future is NOT awaited here: `settled?` says whether it is ready and
200+ `complete!` takes the result, so a caller drives this from the same timer
201+ that drives `frq.av/pump!` rather than blocking the loop."
202+ [handle kind]
203+ (let [state (atom nil)
204+ cb (continuation state)
205+ poll (case kind
206+ :u64 raw/rust-future-poll-u64
207+ :void raw/rust-future-poll-void
208+ :rb raw/rust-future-poll-rust-buffer)]
209+ (poll handle cb 0)
210+ {:handle handle :kind kind :state state :callback cb :poll poll}))
211+
212+(defn settled?
213+ "Has the continuation reported READY?
214+
215+ MAYBE-READY means the far side wants another poll, which this issues and
216+ then answers false — so calling `settled?` from a timer is what advances a
217+ future, and there is no thread on this side waiting on one."
218+ [{:keys [handle state poll callback]}]
219+ (let [r @state]
220+ (cond
221+ (nil? r) false
222+ (= r poll-ready) true
223+ (= r poll-maybe-ready) (do (reset! state nil)
224+ (poll handle callback 0)
225+ false)
226+ :else false)))
227+
228+(defn complete!
229+ "Take a settled future's result and release it.
230+
231+ Only valid once `settled?` has answered true — completing early is what
232+ blocks the calling thread, which on the loop thread is the freeze this whole
233+ polling shape exists to avoid. The future handle is freed either way, so a
234+ raising `complete` still does not leak one."
235+ [{:keys [handle kind]}]
236+ (try
237+ (case kind
238+ :u64 (with-out-status #(raw/rust-future-complete-u64 handle %))
239+ :void (do (with-out-status #(raw/rust-future-complete-void handle %)) nil)
240+ :rb (ffi/with-arena [a]
241+ (let [out (ffi/alloc a (ffi/layout-size rust-buffer))]
242+ (with-out-status #(raw/rust-future-complete-rust-buffer out handle %))
243+ out)))
244+ (finally
245+ (case kind
246+ :u64 (raw/rust-future-free-u64 handle)
247+ :void (raw/rust-future-free-void handle)
248+ :rb (raw/rust-future-free-rust-buffer handle)))))
249+
250+;; --- the version guard -------------------------------------------------------
251+
252+;; What this file was written against: moq-ffi 0.3.17, UniFFI contract 30.
253+;; Both are asserted rather than assumed — see the namespace docstring on why a
254+;; silent mismatch is the failure mode worth spending a startup check on.
255+(def ^:const expected-contract 30)
256+
257+(defn check-abi!
258+ "Refuse a `libmoq_ffi` this file was not written against."
259+ []
260+ (let [v (raw/uniffi-contract-version)]
261+ (when-not (= v expected-contract)
262+ (throw (ex-info (str "libmoq_ffi UniFFI contract " v
263+ ", expected " expected-contract
264+ " — frq.moq.* was generated against moq-ffi 0.3.17")
265+ {:found v :expected expected-contract})))
266+ v))
new file mode 100644
@@ -0,0 +1,266 @@
1+(ns frq.moq.uniffi
2+ "The UniFFI ABI, in jolt — the substrate every `frq.moq.*` binding sits on.
3+
4+ `libmoq_ffi` is not a hand-written C library. It is what UniFFI generates,
5+ and its shape is the same one UniFFI's Swift and Kotlin backends consume:
6+
7+ * **Values cross as `RustBuffer`** — a {capacity, len, data} triple, passed
8+ and returned BY VALUE. A string is its UTF-8 bytes in one; so is a lowered
9+ error. The buffer is Rust-owned and must go back through `rustbuffer_free`.
10+ * **Errors are an out-parameter.** Every fallible entry point takes a
11+ trailing `RustCallStatus *`, and the `code` byte in it says what happened:
12+ 0 succeeded, 1 threw (the lowered error is in `errorBuf`), 2 panicked (a
13+ message is in `errorBuf`).
14+ * **Objects are handles**, not pointers — a `uint64_t` with `clone_*` and
15+ `free_*` around it. A handle is cloned before each method call and freed
16+ once, which is what UniFFI's generated code does and why doing it by hand
17+ is the part to get right.
18+ * **Async is a future to be polled.** `connect` and friends return a future
19+ handle rather than a value: poll it with a continuation callback, and when
20+ the callback reports READY, `complete` it for the result and `free` it.
21+
22+ Two facts about the far side shape the async half here. The continuation is
23+ invoked from a tokio worker — a thread jolt did not start — so it is built in
24+ an `auto-arena` and marked `:collect-safe`, which is exactly the case that
25+ arena documents. And `frq.av`'s contract is that nothing calls back into the
26+ UI: the continuation therefore does the smallest possible thing, flipping a
27+ flag, and `settled?` is what a caller on the loop thread asks.
28+
29+ The version guard is not optional. UniFFI writes a contract version and a
30+ per-method checksum into the object, and a `libmoq_ffi` built from a
31+ different revision will have the same symbol names with different layouts
32+ behind them. `check-abi!` is called once at load; a mismatch is a hard error
33+ rather than a corrupted read some minutes into a call."
34+ (:require [jolt.ffi :as ffi]
35+ [frq.moq.raw :as raw]))
36+
37+;; --- the primitives ----------------------------------------------------------
38+;; UNIFFI_SHARED_HEADER_V4. These three are stable across uniffied crates —
39+;; the header carries a guard that refuses to mix versions, and these layouts
40+;; are that version's.
41+
42+(def rust-buffer
43+ (ffi/layout [:struct [[:capacity :uint64]
44+ [:len :uint64]
45+ [:data :pointer]]]))
46+
47+(def foreign-bytes
48+ (ffi/layout [:struct [[:len :int32]
49+ [:data :pointer]]]))
50+
51+(def rust-call-status
52+ (ffi/layout [:struct [[:code :int8]
53+ [:error-buf [:struct [[:capacity :uint64]
54+ [:len :uint64]
55+ [:data :pointer]]]]]]))
56+
57+;; `code` in a RustCallStatus.
58+(def ^:const status-ok 0)
59+(def ^:const status-error 1)
60+(def ^:const status-panic 2)
61+
62+;; What a continuation is handed. READY means `complete` will not block;
63+;; MAYBE-READY means poll again.
64+(def ^:const poll-ready 0)
65+(def ^:const poll-maybe-ready 1)
66+
67+;; --- the entry points -------------------------------------------------------
68+;; Not redeclared here. `frq.moq.raw` is generated from the object's own
69+;; embedded metadata and already declares all 403 of them, including these —
70+;; so this namespace binds behaviour to them rather than restating signatures
71+;; that a regeneration could move underneath it.
72+
73+;; --- errors ------------------------------------------------------------------
74+
75+;; Forward: `with-out-status` expands to a call to this, and jolt resolves the
76+;; expansion when it ANALYSES it rather than when it runs.
77+(declare throw-status!)
78+
79+(defmacro with-out-status
80+ "Run `f` with a zeroed RustCallStatus, then raise if it came back non-ok.
81+
82+ Every fallible entry point in the object takes one of these as its last
83+ argument, so this is the shape nearly every call in `frq.moq.*` wears. The
84+ status is confined: it lives exactly as long as the call."
85+ [f]
86+ `(ffi/with-arena [a#]
87+ (let [s# (ffi/alloc a# (ffi/layout-size rust-call-status))]
88+ (ffi/write s# rust-call-status {:code status-ok
89+ :error-buf {:capacity 0 :len 0
90+ :data ffi/null}})
91+ (let [v# (~f s#)]
92+ (if (= status-ok (ffi/read-field s# rust-call-status [:code]))
93+ v#
94+ (throw-status! s#))))))
95+
96+(defn- status-message
97+ "Read and RELEASE the lowered error sitting in a non-ok status.
98+
99+ Both `error` and `panic` put a RustBuffer in `errorBuf`, and both are the
100+ caller's to free — the difference is only what is inside. A panic's buffer is
101+ a bare UTF-8 message; an error's is the lowered `MoqError`, whose first bytes
102+ are a variant discriminant. Neither is decoded here: this namespace does not
103+ know MoqError's shape, so it reports the bytes it can and leaves lifting the
104+ variant to the binding that declared the type.
105+
106+ The free goes through a status of its own rather than `with-out-status`: this
107+ is already the error path, and a raise from freeing an error buffer would
108+ lose the error that got us here."
109+ [status-ptr]
110+ (let [len (ffi/read-field status-ptr rust-call-status [:error-buf :len])
111+ data (ffi/read-field status-ptr rust-call-status [:error-buf :data])
112+ text (when (and (pos? len) (not (ffi/null? data)))
113+ ;; Not ptr->string: the buffer is length-counted, not
114+ ;; NUL-terminated, and a lowered error may hold an interior zero.
115+ (ffi/read-bytes data len))]
116+ (ffi/with-arena [a]
117+ (let [free-status (ffi/alloc a (ffi/layout-size rust-call-status))]
118+ (ffi/write free-status rust-call-status
119+ {:code status-ok
120+ :error-buf {:capacity 0 :len 0 :data ffi/null}})
121+ (raw/rustbuffer-free (ffi/place status-ptr rust-call-status [:error-buf])
122+ free-status)))
123+ text))
124+
125+(defn- throw-status! [status-ptr]
126+ (let [code (ffi/read-field status-ptr rust-call-status [:code])
127+ msg (status-message status-ptr)]
128+ (throw (ex-info (if (= code status-panic)
129+ (str "libmoq_ffi panicked: " msg)
130+ (str "libmoq_ffi call failed: " msg))
131+ {:code code :message msg}))))
132+
133+;; --- strings -----------------------------------------------------------------
134+
135+(defn lower-string
136+ "Copy `s` into a Rust-owned RustBuffer, written into `dest`.
137+
138+ UniFFI lowers a bare String as its UTF-8 bytes with no length prefix — the
139+ buffer's own `len` is the length. `from_bytes` copies, so the ForeignBytes
140+ jolt hands over may live in a confined arena and die with this call.
141+
142+ The bytes come from `string->ptr`, which encodes UTF-8 and records the size
143+ it allocated; that size counts the NUL it appends, which is why the length
144+ handed to Rust is one less. A NUL is not part of the value here — a
145+ RustBuffer is length-counted, and including the terminator would append a
146+ zero byte to every string that crossed."
147+ [dest s]
148+ (ffi/with-arena [a]
149+ (let [p (ffi/string->ptr a s)
150+ n (max 0 (dec (ffi/size p)))
151+ fbs (ffi/alloc a (ffi/layout-size foreign-bytes))]
152+ (ffi/write fbs foreign-bytes {:len n :data p})
153+ (with-out-status #(raw/rustbuffer-from-bytes dest fbs %))
154+ dest)))
155+
156+(defn lift-string
157+ "Read a returned RustBuffer as a string and free it.
158+
159+ `read-bytes` decodes UTF-8 itself, so the length-counted bytes become a jolt
160+ string in one block move — no NUL is looked for, which is what a buffer that
161+ may hold an interior zero needs.
162+
163+ The buffer is Rust-owned, so it goes back through `rustbuffer_free` whether
164+ or not it held anything: a zero-length buffer still carries a capacity."
165+ [rb-ptr]
166+ (let [len (ffi/read-field rb-ptr rust-buffer [:len])
167+ data (ffi/read-field rb-ptr rust-buffer [:data])
168+ s (if (and (pos? len) (not (ffi/null? data)))
169+ (ffi/read-bytes data len)
170+ "")]
171+ (with-out-status #(raw/rustbuffer-free rb-ptr %))
172+ s))
173+
174+;; --- futures -----------------------------------------------------------------
175+
176+(defn- continuation
177+ "A `void (uint64_t data, int8_t poll_result)` for the far side to invoke.
178+
179+ Built in the auto-arena and `:collect-safe` on purpose: tokio calls this from
180+ a worker thread jolt never started, and no lexical scope on this side is the
181+ callback's lifetime — which is the case `ffi/auto-arena` exists for.
182+
183+ It does as little as a callback can. Recording the poll result into an atom
184+ is the whole body; nothing here touches glimmer, allocates a jolt value that
185+ outlives the call, or re-enters the object. `frq.av`'s rule that nothing
186+ calls back into the UI survives because the UI is never on this path — a
187+ caller on the loop thread reads the atom instead."
188+ [state]
189+ (ffi/callback (ffi/auto-arena)
190+ (fn [_data result] (reset! state (long result)))
191+ [:uint64 :int8] :void
192+ :collect-safe))
193+
194+(defn start-future
195+ "Begin polling `handle`, and answer a map the loop thread can interrogate.
196+
197+ `kind` picks the width family — :u64 for an object or integer result, :void
198+ for one that resolves to nothing, :rb for a value that arrives as a buffer.
199+ The future is NOT awaited here: `settled?` says whether it is ready and
200+ `complete!` takes the result, so a caller drives this from the same timer
201+ that drives `frq.av/pump!` rather than blocking the loop."
202+ [handle kind]
203+ (let [state (atom nil)
204+ cb (continuation state)
205+ poll (case kind
206+ :u64 raw/rust-future-poll-u64
207+ :void raw/rust-future-poll-void
208+ :rb raw/rust-future-poll-rust-buffer)]
209+ (poll handle cb 0)
210+ {:handle handle :kind kind :state state :callback cb :poll poll}))
211+
212+(defn settled?
213+ "Has the continuation reported READY?
214+
215+ MAYBE-READY means the far side wants another poll, which this issues and
216+ then answers false — so calling `settled?` from a timer is what advances a
217+ future, and there is no thread on this side waiting on one."
218+ [{:keys [handle state poll callback]}]
219+ (let [r @state]
220+ (cond
221+ (nil? r) false
222+ (= r poll-ready) true
223+ (= r poll-maybe-ready) (do (reset! state nil)
224+ (poll handle callback 0)
225+ false)
226+ :else false)))
227+
228+(defn complete!
229+ "Take a settled future's result and release it.
230+
231+ Only valid once `settled?` has answered true — completing early is what
232+ blocks the calling thread, which on the loop thread is the freeze this whole
233+ polling shape exists to avoid. The future handle is freed either way, so a
234+ raising `complete` still does not leak one."
235+ [{:keys [handle kind]}]
236+ (try
237+ (case kind
238+ :u64 (with-out-status #(raw/rust-future-complete-u64 handle %))
239+ :void (do (with-out-status #(raw/rust-future-complete-void handle %)) nil)
240+ :rb (ffi/with-arena [a]
241+ (let [out (ffi/alloc a (ffi/layout-size rust-buffer))]
242+ (with-out-status #(raw/rust-future-complete-rust-buffer out handle %))
243+ out)))
244+ (finally
245+ (case kind
246+ :u64 (raw/rust-future-free-u64 handle)
247+ :void (raw/rust-future-free-void handle)
248+ :rb (raw/rust-future-free-rust-buffer handle)))))
249+
250+;; --- the version guard -------------------------------------------------------
251+
252+;; What this file was written against: moq-ffi 0.3.17, UniFFI contract 30.
253+;; Both are asserted rather than assumed — see the namespace docstring on why a
254+;; silent mismatch is the failure mode worth spending a startup check on.
255+(def ^:const expected-contract 30)
256+
257+(defn check-abi!
258+ "Refuse a `libmoq_ffi` this file was not written against."
259+ []
260+ (let [v (raw/uniffi-contract-version)]
261+ (when-not (= v expected-contract)
262+ (throw (ex-info (str "libmoq_ffi UniFFI contract " v
263+ ", expected " expected-contract
264+ " — frq.moq.* was generated against moq-ffi 0.3.17")
265+ {:found v :expected expected-contract})))
266+ v))
added tools/py2jolt.py +106 -0
new file mode 100644
@@ -0,0 +1,106 @@
1+#!/usr/bin/env python3
2+"""Turn uniffi-bindgen's Python output into jolt `defcfn` declarations.
3+
4+The Python backend emits, for every entry point in the library, a pair of
5+lines that together are an exact ABI description:
6+
7+ _UniffiLib.uniffi_moq_ffi_fn_method_moqclient_connect.argtypes = (
8+ ctypes.c_uint64, _UniffiRustBuffer, ctypes.POINTER(_UniffiRustCallStatus),
9+ )
10+ _UniffiLib.uniffi_moq_ffi_fn_method_moqclient_connect.restype = ctypes.c_uint64
11+
12+That is generated from the metadata embedded in the .so itself, so it matches
13+the object being bound rather than a header shipped alongside it -- which for
14+this release is a different build (the Apple artifact carries audio/ video, the
15+Linux and Android ones do not).
16+"""
17+import re, sys, collections
18+
19+CTYPE = {
20+ "ctypes.c_int8": ":int8", "ctypes.c_uint8": ":uint8",
21+ "ctypes.c_int16": ":int16", "ctypes.c_uint16": ":uint16",
22+ "ctypes.c_int32": ":int32", "ctypes.c_uint32": ":uint32",
23+ "ctypes.c_int64": ":int64", "ctypes.c_uint64": ":uint64",
24+ "ctypes.c_float": ":float", "ctypes.c_double": ":double",
25+ "ctypes.c_void_p": ":pointer", "ctypes.c_size_t": ":uint64",
26+ "None": ":void",
27+}
28+# A RustBuffer crosses by value; a status is always a pointer out-param.
29+RB = "[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]"
30+STATUS = ":pointer"
31+
32+def conv(t):
33+ t = t.strip().rstrip(",").strip()
34+ if not t:
35+ return None
36+ if t in CTYPE:
37+ return CTYPE[t]
38+ if "RustCallStatus" in t:
39+ return STATUS
40+ if "RustBuffer" in t:
41+ return RB
42+ if "ForeignBytes" in t:
43+ return "[:by-value [:struct [[:len :int32] [:data :pointer]]]]"
44+ if t.startswith("ctypes.POINTER"):
45+ return ":pointer"
46+ # A function-pointer typedef (the future continuation) -- jolt lowers an
47+ # ffi/callback to a plain pointer, so that is what the slot takes.
48+ if "callback" in t.lower() or "struct" in t.lower():
49+ return ":pointer"
50+ return None # unknown -- reported, never guessed
51+
52+def split_args(s):
53+ out, depth, cur = [], 0, ""
54+ for ch in s:
55+ if ch == "(":
56+ depth += 1
57+ elif ch == ")":
58+ depth -= 1
59+ if ch == "," and depth == 0:
60+ out.append(cur); cur = ""
61+ else:
62+ cur += ch
63+ if cur.strip():
64+ out.append(cur)
65+ return out
66+
67+def main(path):
68+ src = open(path).read()
69+ args = dict(re.findall(r"_UniffiLib\.(\w+)\.argtypes\s*=\s*\(([^)]*(?:\([^)]*\)[^)]*)*)\)", src))
70+ rets = dict(re.findall(r"_UniffiLib\.(\w+)\.restype\s*=\s*(.+)", src))
71+ names = sorted(set(args) | set(rets))
72+ unknown = collections.Counter()
73+ rows = []
74+ for n in names:
75+ a = [conv(x) for x in split_args(args.get(n, ""))]
76+ r = conv(rets.get(n, "None"))
77+ if None in a or r is None:
78+ for x in split_args(args.get(n, "")) + [rets.get(n, "None")]:
79+ if conv(x) is None:
80+ unknown[x.strip()] += 1
81+ continue
82+ rows.append((n, a, r))
83+ return rows, unknown, len(names)
84+
85+if __name__ == "__main__":
86+ rows, unknown, total = main(sys.argv[1])
87+ print(f";; {len(rows)} of {total} entry points bound", file=sys.stderr)
88+ if unknown:
89+ print(";; UNMAPPED (left unbound rather than guessed):", file=sys.stderr)
90+ for t, c in unknown.most_common():
91+ print(f";; {t} x{c}", file=sys.stderr)
92+ for n, a, r in rows:
93+ # Anchored, longest-first: "uniffi_moq_ffi_checksum_" must not be
94+ # eaten by the "ffi_moq_ffi_" that also matches inside it.
95+ for pre in ("uniffi_moq_ffi_fn_", "uniffi_moq_ffi_checksum_",
96+ "ffi_moq_ffi_", "uniffi_moq_ffi_"):
97+ if n.startswith(pre):
98+ stem = n[len(pre):]
99+ if pre.endswith("checksum_"):
100+ stem = "checksum-" + stem
101+ break
102+ else:
103+ stem = n
104+ jolt_name = stem.replace("_", "-")
105+ argv = " ".join(a) if a else ""
106+ print(f'(ffi/defcfn {jolt_name} "{n}" [{argv}] {r})')
new file mode 100644
@@ -0,0 +1,106 @@
1+#!/usr/bin/env python3
2+"""Turn uniffi-bindgen's Python output into jolt `defcfn` declarations.
3+
4+The Python backend emits, for every entry point in the library, a pair of
5+lines that together are an exact ABI description:
6+
7+ _UniffiLib.uniffi_moq_ffi_fn_method_moqclient_connect.argtypes = (
8+ ctypes.c_uint64, _UniffiRustBuffer, ctypes.POINTER(_UniffiRustCallStatus),
9+ )
10+ _UniffiLib.uniffi_moq_ffi_fn_method_moqclient_connect.restype = ctypes.c_uint64
11+
12+That is generated from the metadata embedded in the .so itself, so it matches
13+the object being bound rather than a header shipped alongside it -- which for
14+this release is a different build (the Apple artifact carries audio/ video, the
15+Linux and Android ones do not).
16+"""
17+import re, sys, collections
18+
19+CTYPE = {
20+ "ctypes.c_int8": ":int8", "ctypes.c_uint8": ":uint8",
21+ "ctypes.c_int16": ":int16", "ctypes.c_uint16": ":uint16",
22+ "ctypes.c_int32": ":int32", "ctypes.c_uint32": ":uint32",
23+ "ctypes.c_int64": ":int64", "ctypes.c_uint64": ":uint64",
24+ "ctypes.c_float": ":float", "ctypes.c_double": ":double",
25+ "ctypes.c_void_p": ":pointer", "ctypes.c_size_t": ":uint64",
26+ "None": ":void",
27+}
28+# A RustBuffer crosses by value; a status is always a pointer out-param.
29+RB = "[:by-value [:struct [[:capacity :uint64] [:len :uint64] [:data :pointer]]]]"
30+STATUS = ":pointer"
31+
32+def conv(t):
33+ t = t.strip().rstrip(",").strip()
34+ if not t:
35+ return None
36+ if t in CTYPE:
37+ return CTYPE[t]
38+ if "RustCallStatus" in t:
39+ return STATUS
40+ if "RustBuffer" in t:
41+ return RB
42+ if "ForeignBytes" in t:
43+ return "[:by-value [:struct [[:len :int32] [:data :pointer]]]]"
44+ if t.startswith("ctypes.POINTER"):
45+ return ":pointer"
46+ # A function-pointer typedef (the future continuation) -- jolt lowers an
47+ # ffi/callback to a plain pointer, so that is what the slot takes.
48+ if "callback" in t.lower() or "struct" in t.lower():
49+ return ":pointer"
50+ return None # unknown -- reported, never guessed
51+
52+def split_args(s):
53+ out, depth, cur = [], 0, ""
54+ for ch in s:
55+ if ch == "(":
56+ depth += 1
57+ elif ch == ")":
58+ depth -= 1
59+ if ch == "," and depth == 0:
60+ out.append(cur); cur = ""
61+ else:
62+ cur += ch
63+ if cur.strip():
64+ out.append(cur)
65+ return out
66+
67+def main(path):
68+ src = open(path).read()
69+ args = dict(re.findall(r"_UniffiLib\.(\w+)\.argtypes\s*=\s*\(([^)]*(?:\([^)]*\)[^)]*)*)\)", src))
70+ rets = dict(re.findall(r"_UniffiLib\.(\w+)\.restype\s*=\s*(.+)", src))
71+ names = sorted(set(args) | set(rets))
72+ unknown = collections.Counter()
73+ rows = []
74+ for n in names:
75+ a = [conv(x) for x in split_args(args.get(n, ""))]
76+ r = conv(rets.get(n, "None"))
77+ if None in a or r is None:
78+ for x in split_args(args.get(n, "")) + [rets.get(n, "None")]:
79+ if conv(x) is None:
80+ unknown[x.strip()] += 1
81+ continue
82+ rows.append((n, a, r))
83+ return rows, unknown, len(names)
84+
85+if __name__ == "__main__":
86+ rows, unknown, total = main(sys.argv[1])
87+ print(f";; {len(rows)} of {total} entry points bound", file=sys.stderr)
88+ if unknown:
89+ print(";; UNMAPPED (left unbound rather than guessed):", file=sys.stderr)
90+ for t, c in unknown.most_common():
91+ print(f";; {t} x{c}", file=sys.stderr)
92+ for n, a, r in rows:
93+ # Anchored, longest-first: "uniffi_moq_ffi_checksum_" must not be
94+ # eaten by the "ffi_moq_ffi_" that also matches inside it.
95+ for pre in ("uniffi_moq_ffi_fn_", "uniffi_moq_ffi_checksum_",
96+ "ffi_moq_ffi_", "uniffi_moq_ffi_"):
97+ if n.startswith(pre):
98+ stem = n[len(pre):]
99+ if pre.endswith("checksum_"):
100+ stem = "checksum-" + stem
101+ break
102+ else:
103+ stem = n
104+ jolt_name = stem.replace("_", "-")
105+ argv = " ".join(a) if a else ""
106+ print(f'(ffi/defcfn {jolt_name} "{n}" [{argv}] {r})')