Files
meta-feeder-sdk/Cargo.toml
T
2026-10-04 13:48:27 +02:00

96 lines
4.3 KiB
TOML

[package]
name = "meta-feeder-sdk"
version = "1.6.0"
edition = "2021"
rust-version = "1.85"
license = "MIT"
repository = "https://github.com/worph/meta-feeder-sdk"
description = "Source-agnostic foundation for MetaMesh gateway feeders: the FeederPlugin trait, the content-addressing hash families, the structured-query evaluator, and an axum harness that serves any set of plugins over the feeder HTTP contract."
readme = "README.md"
keywords = ["metamesh", "feeder", "gateway", "content-addressing", "plugin"]
categories = ["api-bindings", "web-programming::http-server"]
# Not on crates.io yet — consumers depend on a git tag while the contract is
# still moving (see docs/project-architecture/feeder-architecture.md §8).
# Flip this, not the dep form, when `cargo add meta-feeder-sdk` should work.
publish = false
# This repo IS the crate. The explicit (empty) workspace table stops it being
# absorbed into a parent workspace when it is vendored or path-overridden into
# a feeder checkout during local development.
[workspace]
# Source-agnostic foundation shared by the gateway core and every feeder
# sidecar binary: the `FeederPlugin` trait, the content-addressing hash
# families, the per-plugin redb cache, the shared HTTP/cache helpers, the
# structured-query evaluator, and the axum `serve_feeders` harness that wraps
# any set of `FeederPlugin`s in the feeder HTTP contract.
#
# Deliberately libp2p-free / blockstore-free: a feeder finds + fetches bytes;
# the gateway core owns hashing-into-the-blockstore, the meta-core store-back,
# and the libp2p wire. Keep heavy deps (librqbit, beetswap, cid, libp2p) OUT
# of here so feeders that don't need them don't pay for them.
[features]
default = ["feeder"]
# Everything a feeder sidecar (and the transport contract) builds on: the
# FeederPlugin trait, hashing, the redb cache, the axum harness. On by default
# so existing consumers build exactly what they always did.
feeder = [
"beacon",
"dep:axum", "dep:hyper", "dep:reqwest", "dep:base64", "dep:futures",
"dep:async-trait", "dep:anyhow", "dep:thiserror", "dep:sha2", "dep:bytes",
"dep:regex", "dep:redb",
]
# Beacon v2 local discovery (`src/beacon/`). Needs only tokio/serde/tracing/libc,
# so a meta-* service takes the SDK with `default-features = false,
# features = ["beacon"]` and pulls in none of the feeder machinery.
beacon = ["dep:libc"]
# The meta-share transport-plugin contract (`src/transport/`): the hull's
# client, the plugins' axum harness, the focus replica, shared error/range
# types. Off by default so feeders build exactly what they always did.
transport = ["feeder", "dep:cid", "dep:tokio-util"]
# Conformance checks any transport implementation must pass.
testkit = ["transport"]
[dependencies]
# Async runtime + HTTP server (the serve_feeders harness)
tokio = { version = "1.40", features = ["full"] }
axum = { version = "0.7", features = ["json"], optional = true }
hyper = { version = "1", features = ["full"], optional = true }
reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream"], default-features = false, optional = true }
# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"
base64 = { version = "0.22", optional = true }
# Utilities
futures = { version = "0.3", optional = true }
async-trait = { version = "0.1", optional = true }
anyhow = { version = "1", optional = true }
thiserror = { version = "1", optional = true }
tracing = "0.1"
sha2 = { version = "0.10", optional = true }
bytes = { version = "1", optional = true }
# Title-tag parsing (shared filename_meta — season/episode/quality/codec/languages).
regex = { version = "1", optional = true }
# Per-plugin midhash/blob cache. Schema is identical to meta-share v1 — see
# cache.rs. Pure-Rust single-process embedded store.
redb = { version = "2", optional = true }
# CID parsing for the transport contract only (`transport::cid`). Optional so
# feeders don't pull it.
cid = { version = "0.11", optional = true }
# Raw sockets for `beacon` (per-interface multicast) and statvfs(2) for
# `transport::fsutil::available_bytes`.
libc = { version = "0.2", optional = true }
# `ReaderStream` for `transport::file`.
tokio-util = { version = "0.7", features = ["io"], optional = true }
[dev-dependencies]
tempfile = "3"
tower = { version = "0.4", features = ["util"] }
tokio = { version = "1.40", features = ["full", "test-util"] }