fulltime-plugin-api 0.1.0

Canonical league-data schema, data-provider WIT interface, and plugin manifest format shared by the FullTime plugin host and data-provider plugins.
Documentation

plugin-api

Canonical league data schema and WIT plugin interface shared by the FullTime plugin host (Apps/rust) and data-provider plugins (Plugins/Bundesliga, and future league plugins).

Neither the host nor any plugin owns this contract - it is versioned and published independently so plugins and the host can evolve without a lockstep release.

What's in this crate

  • Canonical league-data-schema (Competition, Team, Fixture, Standings, ...): the source-agnostic data shape every plugin maps its provider's response into, and every host UI consumes. Covers single-table league formats and group-based tournament formats with the same types.
  • data-provider WIT interface (wit/data-provider.wit): the contract a plugin implements - list-competitions, fetch-fixtures, fetch-results, fetch-standings, fetch-metadata - plus structured error variants for network failure, rate limiting, and schema-mapping failure. Rust bindings are generated from this file via wit-bindgen, not hand-written, so the WIT source is the single source of truth.
  • Plugin manifest format (Manifest): the static TOML file every plugin ships declaring its ID, release version, targeted schema/interface versions, and required network hosts. This crate validates structure and field format only - network reachability and capability enforcement belong to the host runtime (Apps/rust).

Versioning

The schema and the interface each carry an independent major.minor [Version] identifier (SCHEMA_VERSION, INTERFACE_VERSION), because a schema field addition and an interface function signature change are unrelated concerns and shouldn't force a shared breaking version.

Compatibility is major-version equality, minor-version-or-lower on the plugin side: a plugin declaring 1.2 loads against a host on 1.3+ (the host is a superset) but not 1.1 (missing fields) or 2.x (major mismatch). See [Version::accepts].

Usage

[dependencies]
fulltime-plugin-api = "0.1"
use fulltime_plugin_api::{Manifest, SCHEMA_VERSION};

let manifest = Manifest::parse(include_str!("../tests/fixtures/manifest.toml"))?;
assert!(SCHEMA_VERSION.accepts(manifest.schema_version));
# Ok::<(), Box<dyn std::error::Error>>(())

Building a plugin

See docs/plugin-authoring.md for a walkthrough of the WIT interface, manifest format, and versioning policy.

Change log

CHANGELOG

License

Licensed under:

Contribution

Unless explicitly stated otherwise, any contribution intentionally submitted for inclusion in the work by you shall be licensed as above.