Skip to main content

Adapter API

Adapters translate between NTL signals and external protocols.

Adapter Trait

trait Adapter: Send + Sync {
    /// Translate external payload to NTL signal
    fn ingest(&self, external: ExternalPayload) -> Result<Signal>;

    /// Translate NTL signal to external payload
    fn emit(&self, signal: Signal) -> Result<ExternalPayload>;

    /// External protocol identifier
    fn protocol(&self) -> Protocol;

    /// Adapter capabilities
    fn capabilities(&self) -> AdapterCapabilities;

    /// Start the adapter
    async fn start(&self) -> Result<()>;

    /// Stop the adapter
    async fn stop(&self) -> Result<()>;

    /// Health check
    fn health(&self) -> AdapterHealth;
}

ExternalPayload

struct ExternalPayload {
    data: Vec<u8>,
    content_type: String,
    metadata: HashMap<String, String>,
}

AdapterHealth

enum AdapterHealth {
    Healthy,
    Degraded { reason: String },
    Unhealthy { reason: String },
}

Built-in Adapters

Web2Adapter

use ntl::adapter::Web2Adapter;

let adapter = Web2Adapter::builder()
    .with_http("0.0.0.0:8080")
    .with_websocket("0.0.0.0:8081")
    .with_tls(true)
    .build()?;

node.register_adapter(adapter).await?;

Web3Adapter

use ntl::adapter::Web3Adapter;

let adapter = Web3Adapter::builder()
    .with_chain("ethereum", "https://mainnet.infura.io/v3/...")
    .with_did(true)
    .build()?;

node.register_adapter(adapter).await?;

LegacyAdapter

use ntl::adapter::LegacyAdapter;

let adapter = LegacyAdapter::from_config("legacy-endpoints.toml")?;
node.register_adapter(adapter).await?;