1
use crate::convert::{convert_string, ToModel};
2
use crate::error::AetoliaResult;
3
use crate::model::param::{
4
    AlternateRepresentationParam, CalendarUserTypeParam, CommonNameParam, DelegatedFromParam,
5
    DelegatedToParam, DirectoryEntryReferenceParam, EncodingParam, FormatTypeParam,
6
    FreeBusyTimeTypeParam, LanguageParam, MembersParam, Param as ModelParam,
7
    ParticipationStatusParam, RangeParam, RelationshipTypeParam, RoleParam, RsvpParam, SentByParam,
8
    TimeZoneIdParam, TriggerRelationshipParam, ValueTypeParam,
9
};
10
use crate::parser::types::ParamValue as ParserParam;
11

            
12
impl ToModel for ParserParam<'_> {
13
    type Model = ModelParam;
14

            
15
2720
    fn to_model(&self) -> AetoliaResult<Self::Model> {
16
2720
        Ok(match self {
17
120
            ParserParam::AltRep { uri } => ModelParam::AltRep(AlternateRepresentationParam {
18
120
                uri: convert_string(uri),
19
120
            }),
20
44
            ParserParam::CommonName { name } => ModelParam::CommonName(CommonNameParam {
21
44
                name: name.to_string(),
22
44
            }),
23
26
            ParserParam::CalendarUserType { cu_type } => {
24
26
                ModelParam::CalendarUserType(CalendarUserTypeParam {
25
26
                    cu_type: cu_type.clone(),
26
26
                })
27
            }
28
20
            ParserParam::DelegatedFrom { delegators } => {
29
20
                ModelParam::DelegatedFrom(DelegatedFromParam {
30
24
                    delegators: delegators.iter().map(|d| convert_string(d)).collect(),
31
20
                })
32
            }
33
20
            ParserParam::DelegatedTo { delegates } => ModelParam::DelegatedTo(DelegatedToParam {
34
24
                delegates: delegates.iter().map(|d| convert_string(d)).collect(),
35
20
            }),
36
44
            ParserParam::DirectoryEntryReference { uri } => {
37
44
                ModelParam::DirectoryEntryReference(DirectoryEntryReferenceParam {
38
44
                    uri: String::from_utf8_lossy(uri).to_string(),
39
44
                })
40
            }
41
16
            ParserParam::Encoding { encoding } => ModelParam::Encoding(EncodingParam {
42
16
                encoding: encoding.clone(),
43
16
            }),
44
            ParserParam::FormatType {
45
24
                type_name,
46
24
                sub_type_name,
47
24
            } => ModelParam::FormatType(FormatTypeParam {
48
24
                type_name: type_name.to_string(),
49
24
                sub_type_name: sub_type_name.to_string(),
50
24
            }),
51
8
            ParserParam::FreeBusyTimeType { fb_type } => {
52
8
                ModelParam::FreeBusyTimeType(FreeBusyTimeTypeParam {
53
8
                    fb_type: fb_type.clone(),
54
8
                })
55
            }
56
212
            ParserParam::Language { language } => ModelParam::Language(LanguageParam {
57
212
                language: language.clone(),
58
212
            }),
59
20
            ParserParam::Members { members } => ModelParam::Members(MembersParam {
60
24
                members: members.iter().map(|m| convert_string(m)).collect(),
61
20
            }),
62
24
            ParserParam::ParticipationStatus { status } => {
63
24
                ModelParam::ParticipationStatus(ParticipationStatusParam {
64
24
                    status: status.clone(),
65
24
                })
66
            }
67
20
            ParserParam::Range { range } => ModelParam::Range(RangeParam {
68
20
                range: range.clone(),
69
20
            }),
70
10
            ParserParam::Related { related } => {
71
10
                ModelParam::TriggerRelationship(TriggerRelationshipParam {
72
10
                    trigger_relationship: related.clone(),
73
10
                })
74
            }
75
20
            ParserParam::RelationshipType { relationship } => {
76
20
                ModelParam::RelationshipType(RelationshipTypeParam {
77
20
                    relationship: relationship.clone(),
78
20
                })
79
            }
80
26
            ParserParam::Role { role } => ModelParam::Role(RoleParam { role: role.clone() }),
81
26
            ParserParam::Rsvp { rsvp } => ModelParam::Rsvp(RsvpParam { rsvp: *rsvp }),
82
46
            ParserParam::SentBy { address } => ModelParam::SentBy(SentByParam {
83
46
                address: convert_string(address),
84
46
            }),
85
112
            ParserParam::TimeZoneId { tz_id, unique } => ModelParam::TimeZoneId(TimeZoneIdParam {
86
112
                tz_id: tz_id.to_string(),
87
112
                unique: *unique,
88
112
            }),
89
154
            ParserParam::ValueType { value } => ModelParam::ValueType(ValueTypeParam {
90
154
                value: value.clone(),
91
154
            }),
92
1728
            ParserParam::Other { name, value } => ModelParam::Other {
93
1728
                name: convert_string(name),
94
1728
                value: convert_string(value),
95
1728
            },
96
            ParserParam::Others { name, values } => ModelParam::Others {
97
                name: convert_string(name),
98
                values: values.iter().map(|v| convert_string(v)).collect(),
99
            },
100
        })
101
2720
    }
102
}