ndn_ipc/
server.rs

1use std::sync::Arc;
2
3use ndn_packet::Name;
4
5/// High-level NDN IPC server.
6///
7/// Generic over the face type `F` so it can work with any transport:
8/// - `AppFace` for in-process prefix handlers
9/// - `UnixFace` for cross-process server endpoints
10/// - A future `ShmFace` for zero-copy cross-process IPC
11///
12/// The prefix is the name under which this server handles incoming Interests.
13pub struct IpcServer<F> {
14    face: Arc<F>,
15    prefix: Name,
16}
17
18impl<F> IpcServer<F> {
19    pub fn new(face: Arc<F>, prefix: Name) -> Self {
20        Self { face, prefix }
21    }
22
23    pub fn face(&self) -> &F {
24        &self.face
25    }
26
27    pub fn prefix(&self) -> &Name {
28        &self.prefix
29    }
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35    use bytes::Bytes;
36    use ndn_faces::local::InProcFace;
37    use ndn_packet::NameComponent;
38    use ndn_transport::{Face, FaceId};
39
40    #[test]
41    fn new_and_accessors() {
42        let (face, _rx) = InProcFace::new(FaceId(2), 8);
43        let prefix = Name::from_components([NameComponent::generic(Bytes::from_static(b"svc"))]);
44        let server = IpcServer::new(Arc::new(face), prefix.clone());
45        assert_eq!(server.prefix(), &prefix);
46        assert_eq!(server.face().id(), FaceId(2));
47    }
48}