use super::{document::Document};
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Job {
recipients: Vec<Number>,
documents: Vec<Document>,
}
impl Job {
fn new(numbers: Vec<Number>, documents: Vec<Document>) -> Job {
Job {
recipients: numbers,
documents,
}
}
pub fn builder() -> JobBuilder {
JobBuilder::default()
}
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct Number {
number: String,
}
pub struct JobBuilder {
recipients: Vec<Number>,
documents: Vec<Document>,
}
impl JobBuilder {
pub fn default() -> JobBuilder {
JobBuilder {
recipients: Vec::new(),
documents: Vec::new(),
}
}
pub fn add_recipients(mut self, recipients: Vec<String>) -> JobBuilder {
for recipient in recipients.iter() {
self.recipients.push(Number {
number: recipient.to_owned(),
})
}
self
}
pub fn add_recipient(mut self, recipient: String) -> JobBuilder {
self.recipients.push(Number { number: recipient });
self
}
pub fn add_document(mut self, doc: Document) -> JobBuilder {
self.documents.push(doc);
self
}
pub fn add_documents(mut self, docs: Vec<Document>) -> JobBuilder {
self.documents = docs;
self
}
pub fn build(self) -> Job {
Job {
recipients: self.recipients,
documents: self.documents,
}
}
}
#[test]
fn test_job_builder() {
let number = "+490000000000";
let numbers = vec!["+499000000000".to_string(), "+49800000000000".to_string()];
let job = JobBuilder::default()
.add_recipient(number.to_string())
.add_recipients(numbers)
.build();
assert_eq!(job.recipients.len(), 3)
}