use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use crate::error::Result;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
pub struct ChannelId(pub u32);
impl ChannelId {
#[must_use]
pub fn index(self) -> usize {
self.0 as usize
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "kebab-case")]
pub enum ChannelTarget {
Stderr,
File {
path: PathBuf,
#[serde(default)]
append: bool,
},
}
impl ChannelTarget {
pub fn file(path: impl Into<PathBuf>) -> Self {
Self::File {
path: path.into(),
append: true,
}
}
}
pub trait HostBuilder {
fn open_channel(&mut self, target: ChannelTarget) -> Result<ChannelId>;
}