xmltv_rs/programs/models/
credits.rs1use 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}