phoxal 0.24.0

Phoxal - production-oriented autonomous robot framework: the runtime engine and model (the api contract tree lives in phoxal-api, the typed bus in phoxal-bus).
Documentation
// A handle body whose ContractBody::Api is not the participant's selected API is a
// compile error (D60).
use phoxal::prelude::*;

enum ForeignApi {}

impl phoxal_api::ApiVersion for ForeignApi {
    const ID: &'static str = "foreign";
}

#[derive(Clone, serde::Serialize, serde::Deserialize)]
struct ForeignBody;

impl phoxal_api::ContractBody for ForeignBody {
    type Api = ForeignApi;
    const FAMILY: &'static str = "foreign::Body";
    const SCHEMA_ID: &'static str = "ffffffffffffffff";
    const TOPIC: &'static str = "foreign/body";
}

#[derive(phoxal::Service)]
#[phoxal(id = "wrong-api", api = y2026_1)]
struct WrongApi {
    body: Publisher<ForeignBody>,
}

#[phoxal::behavior]
impl WrongApi {
    #[setup]
    async fn setup(_ctx: &mut SetupContext<Self>) -> Result<Self> {
        unimplemented!()
    }
}

fn main() {}