use std::net::SocketAddr;
use crate::DnsRule;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "cmd", content = "payload")]
pub enum IpcRequest {
Add {
domain: String,
target: SocketAddr,
https: bool,
},
AddEphemeral {
domain: String,
target: SocketAddr,
https: bool,
},
Remove { domain: String },
RemoveEphemeral { domain: String },
List,
Resolve { domain: String },
Status,
Stop,
Subscribe,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "type", content = "data")]
pub enum IpcResponse {
Ok,
Error(String),
Rules(Vec<DnsRule>),
Resolved(Option<DnsRule>),
Status { running: bool, rule_count: usize },
Event(DnsEvent),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "kind")]
pub enum DnsEvent {
RuleAdded(DnsRule),
RuleRemoved(DnsRule),
EphemeralAdded(DnsRule),
EphemeralRemoved(DnsRule),
DaemonStopped,
}