1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//! # Interledger.rs
//!
//! A library bundle for the Rust implementation of the Interledger Protocol stack.

/// The core abstractions used by Interledger.rs: IncomingService and OutgoingService
pub mod service {
    pub use interledger_service::*;
}
/// Implementation of the core Interledger v4 packet format.
pub mod packet {
    pub use interledger_packet::*;
}

/// HTTP API for interacting with the Interledger.rs components.
#[cfg(feature = "api")]
pub mod api {
    //! # interledger-api
    //!
    //! HTTP API for interacting with the Interledger.rs components.
    //! See the ilp-node for how this is used in practice.
    pub use interledger_api::*;
}

/// Bilateral Transport Protocol (BTP) client and server
#[cfg(feature = "btp")]
pub mod btp {
    //! # interledger-btp
    //!
    //! Client and server implementations of the [Bilateral Transport Protocol (BTP)](https://github.com/interledger/rfcs/blob/master/0023-bilateral-transfer-protocol/0023-bilateral-transfer-protocol.md).
    //! This is a WebSocket-based protocol for exchanging ILP packets between directly connected peers.
    //!
    //! Because this protocol uses WebSockets, only one party needs to have a publicly-accessible HTTPS
    //! endpoint but both sides can send and receive ILP packets.
    pub use interledger_btp::*;
}

/// Connector-to-Connector Protocol (CCP) routing manager
#[cfg(feature = "ccp")]
pub mod ccp {
    //! # interledger-ccp
    //!
    //! This crate implements the Connector-to-Connector Protocol (CCP) for exchanging routing
    //! information with peers. The `CcpRouteManager` processes Route Update and Route Control
    //! messages from accounts that we are configured to receive routes from and sends route
    //! updates to accounts that we are configured to send updates to.
    //!
    //! The `CcpRouteManager` writes changes to the routing table to the store so that the
    //! updates are used by the `Router` to forward incoming packets to the best next hop
    //! we know about.
    pub use interledger_ccp::*;
}

/// ILP-Over-HTTP client and server
#[cfg(feature = "http")]
pub mod http {
    //! # interledger-http
    //!
    //! Client and server implementations of the [ILP-Over-HTTP](https://github.com/interledger/rfcs/blob/master/0035-ilp-over-http/0035-ilp-over-http.md) bilateral communication protocol.
    //! This protocol is intended primarily for server-to-server communication between peers on the Interledger network.
    pub use interledger_http::*;
}

/// Interledger Dynamic Configuration Protocol (ILDCP)
#[cfg(feature = "ildcp")]
pub mod ildcp {
    //! # interledger-ildcp
    //!
    //! Client and server implementations of the [Interledger Dynamic Configuration Protocol (ILDCP)](https://github.com/interledger/rfcs/blob/master/0031-dynamic-configuration-protocol/0031-dynamic-configuration-protocol.md).
    //!
    //! This is used by clients to query for their ILP address and asset details such as asset code and scale.
    pub use interledger_ildcp::*;
}

/// Router that determines the outgoing Account for a request based on the routing table
#[cfg(feature = "router")]
pub mod router {
    //! # interledger-router
    //!
    //! A service that routes ILP Prepare packets to the correct next
    //! account based on the ILP address in the Prepare packet based
    //! on the routing table.
    //!
    //! A routing table could be as simple as a single entry for the empty prefix
    //! ("") that will route all requests to a specific outgoing account.
    //!
    //! Note that the Router is not responsible for building the routing table,
    //! only using the information provided by the store. The routing table in the
    //! store can either be configured or populated using the `CcpRouteManager`
    //! (see the `interledger-ccp` crate for more details).
    pub use interledger_router::*;
}

/// Miscellaneous services
#[cfg(feature = "service-util")]
pub mod service_util {
    pub use interledger_service_util::*;
}

/// Implementation of the Settlement Engine API (on the connector/node side)
#[cfg(feature = "settlement")]
pub mod settlement {
    pub use interledger_settlement::*;
}

/// Simple Payment Setup Protocol (SPSP) sender and query responder
#[cfg(feature = "spsp")]
pub mod spsp {
    //! # interledger-spsp
    //!
    //! Client and server implementations of the [Simple Payment Setup Protocol (SPSP)](https://github.com/interledger/rfcs/blob/master/0009-simple-payment-setup-protocol/0009-simple-payment-setup-protocol.md).
    //!
    //! This uses a simple HTTPS request to establish a shared key between the sender and receiver that is used to
    //! authenticate ILP packets sent between them. SPSP uses the STREAM transport protocol for sending money and data over ILP.
    pub use interledger_spsp::*;
}

/// Store implementation backed by Redis
#[cfg(feature = "store-redis")]
pub mod store_redis {
    pub use interledger_store_redis::*;
}

/// STREAM Protocol sender and receiver
#[cfg(feature = "stream")]
pub mod stream {
    //! # interledger-stream
    //!
    //! Client and server implementations of the Interledger [STREAM](https://github.com/interledger/rfcs/blob/master/0029-stream/0029-stream.md) transport protocol.
    //!
    //! STREAM is responsible for splitting larger payments and messages into smaller chunks of money and data, and sending them over ILP.
    pub use interledger_stream::*;
}