maven_rs/settings/
mirrors.rs

1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::editor::{
5    utils::{
6        create_basic_text_element, find_or_create_then_set_text_content, from_element_using_builder,
7    },
8    ChildOfListElement, ElementConverter, HasElementName, UpdatableElement,
9};
10
11#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
12pub struct Mirrors {
13    #[serde(rename = "mirror")]
14    pub mirrors: Vec<Mirror>,
15}
16
17#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, Builder)]
18#[serde(rename_all = "camelCase")]
19pub struct Mirror {
20    pub id: String,
21    pub name: String,
22    pub url: String,
23    pub mirror_of: String,
24}
25impl HasElementName for Mirror {
26    fn element_name() -> &'static str {
27        "mirror"
28    }
29}
30
31impl ElementConverter for Mirror {
32    from_element_using_builder!(
33        MirrorBuilder,
34        element,
35        document,
36        "id" => id,
37        "name" => name,
38        "url" => url,
39        "mirrorOf" => mirror_of
40    );
41    fn into_children(
42        self,
43        document: &mut edit_xml::Document,
44    ) -> Result<Vec<edit_xml::Element>, crate::editor::XMLEditorError> {
45        let children = vec![
46            create_basic_text_element(document, "id", self.id),
47            create_basic_text_element(document, "name", self.name),
48            create_basic_text_element(document, "url", self.url),
49            create_basic_text_element(document, "mirrorOf", self.mirror_of),
50        ];
51        Ok(children)
52    }
53}
54impl ChildOfListElement for Mirror {
55    fn parent_element_name() -> &'static str {
56        "mirrors"
57    }
58}
59
60impl UpdatableElement for Mirror {
61    fn update_element(
62        &self,
63        element: edit_xml::Element,
64        document: &mut edit_xml::Document,
65    ) -> Result<(), crate::editor::XMLEditorError> {
66        let Mirror {
67            name,
68            url,
69            mirror_of,
70            ..
71        } = self;
72        find_or_create_then_set_text_content(document, element, "name", name);
73        find_or_create_then_set_text_content(document, element, "url", url);
74        find_or_create_then_set_text_content(document, element, "mirrorOf", mirror_of);
75        Ok(())
76    }
77}