ndn_app/lib.rs
1//! # ndn-app — NDN Application API
2//!
3//! High-level [`Consumer`] and [`Producer`] abstractions for Named Data
4//! Networking, plus [`KeyChain`] for identity management and signing.
5//!
6//! ## Connection modes
7//!
8//! **External forwarder** — connect to a running `ndn-fwd` via Unix socket:
9//!
10//! ```rust,no_run
11//! # use ndn_app::Consumer;
12//! # async fn example() -> Result<(), ndn_app::AppError> {
13//! let mut consumer = Consumer::connect("/run/nfd/nfd.sock").await?;
14//! let data = consumer.fetch("/example/data").await?;
15//! # Ok(())
16//! # }
17//! ```
18//!
19//! **Embedded engine** — run the forwarder in-process (ideal for mobile/Android):
20//!
21//! ```rust,no_run
22//! # use ndn_app::{Consumer, Producer, EngineBuilder};
23//! # use ndn_engine::EngineConfig;
24//! # use ndn_faces::local::InProcFace;
25//! # use ndn_packet::Name;
26//! # use ndn_packet::encode::DataBuilder;
27//! # use ndn_transport::FaceId;
28//! # async fn example() -> anyhow::Result<()> {
29//! // Create in-process face pairs
30//! let (consumer_face, consumer_handle) = InProcFace::new(FaceId(1), 64);
31//! let (producer_face, producer_handle) = InProcFace::new(FaceId(2), 64);
32//!
33//! // Build engine with both faces
34//! let (engine, shutdown) = EngineBuilder::new(EngineConfig::default())
35//! .face(consumer_face)
36//! .face(producer_face)
37//! .build()
38//! .await?;
39//!
40//! // Route Interests for /app → producer face
41//! let prefix: Name = "/app".parse()?;
42//! engine.fib().add_nexthop(&prefix, FaceId(2), 0);
43//!
44//! // Use Consumer/Producer via handles
45//! let mut consumer = Consumer::from_handle(consumer_handle);
46//! let mut producer = Producer::from_handle(producer_handle, prefix);
47//! # Ok(())
48//! # }
49//! ```
50
51#![allow(missing_docs)]
52
53pub mod app_face;
54pub mod connection;
55pub mod consumer;
56pub mod error;
57pub mod producer;
58pub mod queryable;
59pub mod responder;
60pub mod security;
61pub mod subscriber;
62
63#[cfg(feature = "blocking")]
64pub mod blocking;
65
66pub use app_face::OutboundRequest;
67pub use connection::NdnConnection;
68pub use consumer::{Consumer, DEFAULT_INTEREST_LIFETIME, DEFAULT_TIMEOUT};
69pub use error::AppError;
70pub use producer::Producer;
71pub use queryable::{Query, Queryable};
72pub use responder::Responder;
73pub use security::KeyChain;
74pub use subscriber::{Sample, Subscriber, SubscriberConfig};
75
76/// Re-export the engine builder for convenience.
77pub use ndn_engine::{EngineBuilder, ForwarderEngine, ShutdownHandle};
78
79/// Prelude for ergonomic imports.
80pub mod prelude {
81 pub use crate::{AppError, Consumer, KeyChain, Producer, Query, Queryable, Subscriber};
82 pub use ndn_packet::encode::{DataBuilder, InterestBuilder};
83 pub use ndn_packet::{Data, Interest, Name, name};
84}