netconf/message/rpc/operation/
get.rs1use std::io::Write;
2
3use quick_xml::Writer;
4
5use crate::{capabilities::Requirements, message::WriteError, session::Context, Error};
6
7use super::{DataReply, Filter, Opaque, Operation, WriteXml};
8
9#[derive(Debug, Default, Clone)]
10pub struct Get {
11 filter: Option<Filter>,
12}
13
14impl Operation for Get {
15 const NAME: &'static str = "get";
16 const REQUIRED_CAPABILITIES: Requirements = Requirements::None;
17
18 type Builder<'a> = Builder;
19 type Reply = DataReply<Opaque>;
20}
21
22impl WriteXml for Get {
23 fn write_xml<W: Write>(&self, writer: &mut Writer<W>) -> Result<(), WriteError> {
24 writer
25 .create_element(Self::NAME)
26 .write_inner_content(|writer| {
27 if let Some(ref filter) = self.filter {
28 filter.write_xml(writer)?;
29 };
30 Ok(())
31 })
32 .map(|_| ())
33 }
34}
35
36#[derive(Debug, Clone)]
37#[must_use]
38pub struct Builder {
39 filter: Option<Filter>,
40}
41
42impl Builder {
43 pub fn filter(mut self, filter: Option<Filter>) -> Self {
44 self.filter = filter;
45 self
46 }
47}
48
49impl super::Builder<'_, Get> for Builder {
50 fn new(_: &Context) -> Self {
51 Self { filter: None }
52 }
53
54 fn finish(self) -> Result<Get, Error> {
55 Ok(Get {
56 filter: self.filter,
57 })
58 }
59}
60
61#[cfg(test)]
62mod tests {
63 use super::*;
64 use crate::message::{
65 rpc::{MessageId, Request},
66 ClientMsg,
67 };
68
69 #[test]
70 fn default_request_to_xml() {
71 let req = Request {
72 message_id: MessageId(101),
73 operation: Get::default(),
74 };
75 let expect = r#"<rpc message-id="101"><get></get></rpc>]]>]]>"#;
76 assert_eq!(req.to_xml().unwrap(), expect);
77 }
78}