1use std::future::pending;23use anyhow::Result;4use bifrostlink::{Rpc, Rtt};5use bifrostlink_ports::stdio::from_stdio;6use tokio::runtime::Builder;78pub mod host;910pub use bifrostlink;11pub use remowt_link_shared::{self, Address, BifConfig, Fs, Pty, Systemd};1213pub fn plugin_index() -> Result<u16> {14 let arg = std::env::args()15 .nth(1)16 .ok_or_else(|| anyhow::anyhow!("missing plugin index argument"))?;17 arg.parse()18 .map_err(|e| anyhow::anyhow!("invalid plugin index {arg:?}: {e}"))19}2021pub fn run<F>(register: F) -> Result<()>22where23 F: FnOnce(&mut Rpc<BifConfig>),24{25 tracing_subscriber::fmt()26 .with_writer(std::io::stderr)27 .init();2829 let index = plugin_index()?;30 let runtime = Builder::new_current_thread().enable_all().build()?;31 runtime.block_on(async move {32 let mut rpc = Rpc::<BifConfig>::new(Address::Plugin(index));33 rpc.add_direct(Address::Agent, from_stdio(), Rtt(0));34 register(&mut rpc);35 let _rpc = rpc;36 pending::<Result<()>>().await37 })38}