pub struct Served { /* private fields */ }Expand description
The surfaces one router serves, with what answers each.
Implementations§
Source§impl Served
impl Served
Sourcepub fn resolve(
topology: &Topology,
root: &Path,
runtime: Runtime,
) -> Result<Self, Error>
pub fn resolve( topology: &Topology, root: &Path, runtime: Runtime, ) -> Result<Self, Error>
Narrow topology to what a process with these runtime capabilities serves, bind a
handler to every surface in it, and refuse anything that cannot be served coherently.
The refusal is the point: a collision, a nested mount or a native surface with no handler stops the router being built, so it is found by whoever changed a declaration rather than by whoever sent the first request.
The same topology behind an Arc, for a context that hands it to a capability.
Sourcepub fn owner(&self, path: &str) -> Option<(&Surface, &Bound)>
pub fn owner(&self, path: &str) -> Option<(&Surface, &Bound)>
The surface that owns a request path, with what answers it.
Sourcepub fn ready(&self, id: &str) -> bool
pub fn ready(&self, id: &str) -> bool
Is a surface’s producer’s output there? A route the executable answers always is.
Sourcepub fn summary(&self, base: &str) -> String
pub fn summary(&self, base: &str) -> String
The one line a server logs when it starts: how many surfaces it serves and where
each one is, base prefixed so the log is clickable.
Every served surface, not only the public ones: this is an operator’s diagnostic, and the operator attaching a second client needs the MCP mount that the home page has no reason to advertise to a browser.
Both halves are read off the resolution. A surface added tomorrow is in this line, and a route that moves moves here, because nothing below names one.
use majordomus_cli::http::Served;
use majordomus_cli::web::{discover::{self, Runtime}, Topology};
let topology = Topology::new(discover::native_all());
let served = Served::resolve(&topology, std::path::Path::new("/nonexistent"), Runtime::full()).unwrap();
let line = served.summary("http://127.0.0.1:8741");
assert!(line.contains("http://127.0.0.1:8741/swagger"));
// the count is the resolution's, not a number written here: a surface added to
// native_all is in this line, and this assertion does not go stale for saying so
assert!(line.contains(&format!("{} surface(s)", discover::native_all().len())));