libtad_rs/service/astronomy/request/
astroposition.rs1use crate::models::{astronomy::AstronomyObjectType, time::DateTime};
2use crate::service::{ProvidedArgument, RequiredArgument};
3use serde::Serialize;
4
5macro_rules! return_type {
6 ($self:ident) => {
7 AstroPositionRequest {
8 object: $self.object,
9 placeid: $self.placeid,
10 interval: $self.interval,
11 localtime: $self.localtime,
12 utctime: $self.utctime,
13 isotime: $self.isotime,
14 lang: $self.lang,
15 radius: $self.radius,
16 _a: Default::default(),
17 _b: Default::default(),
18 _c: Default::default(),
19 }
20 };
21}
22
23#[derive(Default, Serialize)]
24pub struct AstroPositionRequest<A = ProvidedArgument, B = ProvidedArgument, C = ProvidedArgument> {
48 object: Vec<AstronomyObjectType>,
49 placeid: Vec<String>,
50 interval: Vec<DateTime>,
51 localtime: Option<u8>,
52 utctime: Option<u8>,
53 isotime: Option<u8>,
54 lang: Option<String>,
55 radius: Option<i32>,
56 _a: std::marker::PhantomData<A>,
57 _b: std::marker::PhantomData<B>,
58 _c: std::marker::PhantomData<C>,
59}
60
61impl AstroPositionRequest {
62 pub fn new() -> AstroPositionRequest<RequiredArgument, RequiredArgument, RequiredArgument> {
64 Default::default()
65 }
66}
67
68impl<A, B, C> AstroPositionRequest<A, B, C> {
69 pub fn set_object(
71 mut self,
72 object: Vec<AstronomyObjectType>,
73 ) -> AstroPositionRequest<ProvidedArgument, B, C> {
74 self.object = object;
75
76 return_type!(self)
77 }
78
79 pub fn with_object(
81 mut self,
82 object: AstronomyObjectType,
83 ) -> AstroPositionRequest<ProvidedArgument, B, C> {
84 self.object.push(object);
85
86 return_type!(self)
87 }
88
89 pub fn set_placeid(
91 mut self,
92 placeid: Vec<impl Into<String>>,
93 ) -> AstroPositionRequest<A, ProvidedArgument, C> {
94 self.placeid = placeid.into_iter().map(Into::into).collect();
95
96 return_type!(self)
97 }
98
99 pub fn with_placeid(
101 mut self,
102 placeid: impl Into<String>,
103 ) -> AstroPositionRequest<A, ProvidedArgument, C> {
104 self.placeid.push(placeid.into());
105
106 return_type!(self)
107 }
108
109 pub fn set_interval(
111 mut self,
112 interval: Vec<DateTime>,
113 ) -> AstroPositionRequest<A, B, ProvidedArgument> {
114 self.interval = interval;
115
116 return_type!(self)
117 }
118
119 pub fn with_interval(
121 mut self,
122 interval: DateTime,
123 ) -> AstroPositionRequest<A, B, ProvidedArgument> {
124 self.interval.push(interval);
125
126 return_type!(self)
127 }
128
129 pub fn set_localtime(mut self, enable: bool) -> Self {
131 self.localtime.insert(enable.into());
132
133 self
134 }
135
136 pub fn set_utctime(mut self, enable: bool) -> Self {
138 self.utctime.insert(enable.into());
139
140 self
141 }
142
143 pub fn set_isotime(mut self, enable: bool) -> Self {
145 self.isotime.insert(enable.into());
146
147 self
148 }
149
150 pub fn set_lang(mut self, lang: impl Into<String>) -> Self {
152 self.lang.insert(lang.into());
153
154 self
155 }
156
157 pub fn set_radius(mut self, radius: i32) -> Self {
159 self.radius.insert(radius);
160
161 self
162 }
163}