use kernel::{AxError, Seq};
use serde::{Deserialize, Serialize};
use super::{Answer, Query};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(transparent)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct AskId(pub u32);
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct Ask {
pub ask_id: AskId,
pub query: Query,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct Answered {
pub ask_id: AskId,
pub as_of: Seq,
pub outcome: AskOutcome,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub enum AskOutcome {
Answer(Answer),
Refusal(AxError),
}
#[cfg(test)]
#[allow(clippy::unwrap_used, reason = "test code")]
mod tests {
use super::super::{ClientFrame, Query};
use super::{Ask, AskId};
#[test]
fn a_client_frame_round_trips_through_json() {
let frame = ClientFrame::Ask(Ask {
ask_id: AskId(7),
query: Query::CityView,
});
let text = serde_json::to_string(&frame).unwrap();
let back: ClientFrame = serde_json::from_str(&text).unwrap();
assert_eq!(frame, back);
}
}