xmltv_rs/programs/models/
credits.rs

1use crate::xmltv_error::Result;
2use xml_builder::XMLElement;
3
4use crate::XMLTVProgramActor;
5
6pub struct XMLTVProgramCredits {
7    directors: Vec<String>,
8    actors: Vec<XMLTVProgramActor>,
9    writers: Vec<String>,
10    adapters: Vec<String>,
11    producers: Vec<String>,
12    composers: Vec<String>,
13    editors: Vec<String>,
14    presenters: Vec<String>,
15    commentators: Vec<String>,
16    guests: Vec<String>,
17}
18
19impl XMLTVProgramCredits {
20    pub fn new() -> Self {
21        XMLTVProgramCredits {
22            directors: vec![],
23            actors: vec![],
24            writers: vec![],
25            adapters: vec![],
26            producers: vec![],
27            composers: vec![],
28            editors: vec![],
29            presenters: vec![],
30            commentators: vec![],
31            guests: vec![],
32        }
33    }
34
35    pub fn add_director(&mut self, director: String) {
36        self.directors.push(director);
37    }
38
39    pub fn add_actor(&mut self, actor: XMLTVProgramActor) {
40        self.actors.push(actor);
41    }
42
43    pub fn add_writer(&mut self, writer: String) {
44        self.writers.push(writer);
45    }
46
47    pub fn add_adapter(&mut self, adapter: String) {
48        self.adapters.push(adapter);
49    }
50
51    pub fn add_producer(&mut self, producer: String) {
52        self.producers.push(producer);
53    }
54
55    pub fn add_composer(&mut self, composer: String) {
56        self.composers.push(composer);
57    }
58
59    pub fn add_editor(&mut self, editor: String) {
60        self.editors.push(editor);
61    }
62
63    pub fn add_presenter(&mut self, presenter: String) {
64        self.presenters.push(presenter);
65    }
66
67    pub fn add_commentator(&mut self, commentator: String) {
68        self.commentators.push(commentator);
69    }
70
71    pub fn add_guest(&mut self, guest: String) {
72        self.guests.push(guest);
73    }
74
75    pub fn to_xmlelement(&self) -> Result<XMLElement> {
76        let mut element = XMLElement::new("credits");
77
78        for director in &self.directors {
79            let mut elem = XMLElement::new("director");
80            elem.add_text(director.to_owned())?;
81            element.add_child(elem)?;
82        }
83
84        for actor in &self.actors {
85            let mut elem = XMLElement::new("actor");
86            if let Some(role) = actor.role() {
87                elem.add_attribute("role", role);
88            }
89
90            elem.add_text(actor.actor().to_owned())?;
91            element.add_child(elem)?;
92        }
93
94        for writer in &self.writers {
95            let mut elem = XMLElement::new("writer");
96            elem.add_text(writer.to_owned())?;
97            element.add_child(elem)?;
98        }
99
100        for adapter in &self.adapters {
101            let mut elem = XMLElement::new("adapter");
102            elem.add_text(adapter.to_owned())?;
103            element.add_child(elem)?;
104        }
105
106        for producer in &self.producers {
107            let mut elem = XMLElement::new("producer");
108            elem.add_text(producer.to_owned())?;
109            element.add_child(elem)?;
110        }
111
112        for composer in &self.composers {
113            let mut elem = XMLElement::new("composer");
114            elem.add_text(composer.to_owned())?;
115            element.add_child(elem)?;
116        }
117
118        for editor in &self.editors {
119            let mut elem = XMLElement::new("editor");
120            elem.add_text(editor.to_owned())?;
121            element.add_child(elem)?;
122        }
123
124        for presenter in &self.presenters {
125            let mut elem = XMLElement::new("presenter");
126            elem.add_text(presenter.to_owned())?;
127            element.add_child(elem)?;
128        }
129
130        for commentator in &self.commentators {
131            let mut elem = XMLElement::new("commentator");
132            elem.add_text(commentator.to_owned())?;
133            element.add_child(elem)?;
134        }
135
136        for guest in &self.guests {
137            let mut elem = XMLElement::new("guest");
138            elem.add_text(guest.to_owned())?;
139            element.add_child(elem)?;
140        }
141
142        Ok(element)
143    }
144}