netconf/message/rpc/operation/
discard_changes.rs1use std::io::Write;
2
3use quick_xml::Writer;
4
5use crate::{
6 capabilities::{Capability, Requirements},
7 message::WriteError,
8 session::Context,
9 Error,
10};
11
12use super::{EmptyReply, Operation, WriteXml};
13
14#[derive(Debug, Clone, Copy)]
15pub struct DiscardChanges {
16 _inner: (),
18}
19
20impl Operation for DiscardChanges {
21 const NAME: &'static str = "discard-changes";
22 const REQUIRED_CAPABILITIES: Requirements = Requirements::One(Capability::Candidate);
23
24 type Builder<'a> = Builder<'a>;
25 type Reply = EmptyReply;
26}
27
28impl WriteXml for DiscardChanges {
29 fn write_xml<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), WriteError> {
30 _ = writer.create_element("discard-changes").write_empty()?;
31 Ok(())
32 }
33}
34
35#[derive(Debug, Clone)]
36#[must_use]
37pub struct Builder<'a> {
38 _ctx: &'a Context,
39}
40
41impl<'a> super::Builder<'a, DiscardChanges> for Builder<'a> {
42 fn new(ctx: &'a Context) -> Self {
43 Self { _ctx: ctx }
44 }
45
46 fn finish(self) -> Result<DiscardChanges, Error> {
47 Ok(DiscardChanges { _inner: () })
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54 use crate::message::{
55 rpc::{MessageId, Request},
56 ClientMsg,
57 };
58
59 #[test]
60 fn request_to_xml() {
61 let req = Request {
62 message_id: MessageId(101),
63 operation: DiscardChanges { _inner: () },
64 };
65 let expect = r#"<rpc message-id="101"><discard-changes/></rpc>]]>]]>"#;
66 assert_eq!(req.to_xml().unwrap(), expect);
67 }
68}