use napi::bindgen_prelude::*;
use napi_derive::napi;
use tracing_subscriber::filter::LevelFilter;
mod author;
mod blob;
mod doc;
mod endpoint;
mod gossip;
mod key;
mod net;
mod node;
mod tag;
mod ticket;
pub use author::*;
pub use blob::*;
pub use doc::*;
pub use endpoint::*;
pub use gossip::*;
pub use key::*;
pub use net::*;
pub use node::*;
pub use tag::*;
pub use ticket::*;
#[derive(Debug)]
#[napi(string_enum)]
pub enum LogLevel {
Trace,
Debug,
Info,
Warn,
Error,
Off,
}
impl From<LogLevel> for LevelFilter {
fn from(level: LogLevel) -> LevelFilter {
match level {
LogLevel::Trace => LevelFilter::TRACE,
LogLevel::Debug => LevelFilter::DEBUG,
LogLevel::Info => LevelFilter::INFO,
LogLevel::Warn => LevelFilter::WARN,
LogLevel::Error => LevelFilter::ERROR,
LogLevel::Off => LevelFilter::OFF,
}
}
}
#[napi]
pub fn set_log_level(level: LogLevel) {
use tracing_subscriber::{fmt, prelude::*, reload};
let filter: LevelFilter = level.into();
let (filter, _) = reload::Layer::new(filter);
let mut layer = fmt::Layer::default();
layer.set_ansi(false);
tracing_subscriber::registry()
.with(filter)
.with(layer)
.init();
}
#[napi]
pub fn key_to_path(key: Vec<u8>, prefix: Option<String>, root: Option<String>) -> Result<String> {
let path = iroh_blobs::util::fs::key_to_path(key, prefix, root.map(std::path::PathBuf::from))?;
let path = path.to_str();
let path = path.ok_or_else(|| anyhow::anyhow!("Unable to parse path {:?}", path))?;
let path = path.to_string();
Ok(path)
}
#[napi]
pub fn path_to_key(path: String, prefix: Option<String>, root: Option<String>) -> Result<Vec<u8>> {
let key = iroh_blobs::util::fs::path_to_key(
std::path::PathBuf::from(path),
prefix,
root.map(std::path::PathBuf::from),
)?;
Ok(key.to_vec())
}