use std::net::SocketAddr;
use a7n_core::pairing::PairingCode;
pub(crate) use a7n_ipc::StatusInfo as Status;
use a7n_proto::MachineId;
use tokio::sync::oneshot;
use crate::daemon::DaemonError;
use crate::pin_store::Entry;
pub(crate) type Reply<T> = oneshot::Sender<Result<T, DaemonError>>;
#[derive(Debug)]
pub(crate) enum Command {
ReloadConfig(Reply<()>),
RecordTriggerKey(Reply<String>),
Shutdown(Reply<()>),
SetPaused {
paused: bool,
reply: Reply<()>,
},
Switch {
machine: MachineId,
reply: Reply<Option<String>>,
},
Wake {
machine: MachineId,
reply: Reply<()>,
},
Status(Reply<Status>),
SendFiles {
peer: MachineId,
paths: Vec<std::path::PathBuf>,
reply: Reply<(u64, usize)>,
},
FilesAccept {
peer: MachineId,
offer_id: u64,
reply: Reply<()>,
},
FilesReject {
peer: MachineId,
reply: Reply<()>,
},
CancelTransfer {
id: u64,
reply: Reply<()>,
},
ClipboardStatus(Reply<a7n_ipc::ClipboardInfo>),
ClipboardAccept {
machine: MachineId,
generation: u64,
reply: Reply<()>,
},
ClipboardReject(Reply<()>),
GetLayout(Reply<a7n_ipc::LayoutInfo>),
SetLayout {
placed: Vec<a7n_ipc::LayoutPlacement>,
reply: Reply<()>,
},
PairHost(Reply<PairingCode>),
PairJoin {
addr: SocketAddr,
code: PairingCode,
reply: Reply<Entry>,
},
Unpair {
machine: MachineId,
reply: Reply<()>,
},
Connect {
addr: SocketAddr,
reply: Reply<()>,
},
RequestPermission {
permission: a7n_platform::permissions::Permission,
reply: Reply<()>,
},
}