git.delta.rocks / remowt / refs/commits / 62007a6e971b

difftreelog

source

crates/remowt-plugin/src/lib.rs969 Bsourcehistory
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}