nautilus_common/messages/data/
request.rs

1// -------------------------------------------------------------------------------------------------
2//  Copyright (C) 2015-2025 Nautech Systems Pty Ltd. All rights reserved.
3//  https://nautechsystems.io
4//
5//  Licensed under the GNU Lesser General Public License Version 3.0 (the "License");
6//  You may not use this file except in compliance with the License.
7//  You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html
8//
9//  Unless required by applicable law or agreed to in writing, software
10//  distributed under the License is distributed on an "AS IS" BASIS,
11//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//  See the License for the specific language governing permissions and
13//  limitations under the License.
14// -------------------------------------------------------------------------------------------------
15
16use std::num::NonZeroUsize;
17
18use chrono::{DateTime, Utc};
19use indexmap::IndexMap;
20use nautilus_core::{UUID4, UnixNanos};
21use nautilus_model::{
22    data::{BarType, DataType},
23    identifiers::{ClientId, InstrumentId, Venue},
24};
25
26use super::check_client_id_or_venue;
27
28#[derive(Clone, Debug)]
29pub struct RequestCustomData {
30    pub client_id: ClientId,
31    pub data_type: DataType,
32    pub start: Option<DateTime<Utc>>,
33    pub end: Option<DateTime<Utc>>,
34    pub limit: Option<NonZeroUsize>,
35    pub request_id: UUID4,
36    pub ts_init: UnixNanos,
37    pub params: Option<IndexMap<String, String>>,
38}
39
40impl RequestCustomData {
41    /// Creates a new [`RequestCustomData`] instance.
42    #[allow(clippy::too_many_arguments)]
43    pub fn new(
44        client_id: ClientId,
45        data_type: DataType,
46        start: Option<DateTime<Utc>>,
47        end: Option<DateTime<Utc>>,
48        limit: Option<NonZeroUsize>,
49        request_id: UUID4,
50        ts_init: UnixNanos,
51        params: Option<IndexMap<String, String>>,
52    ) -> Self {
53        Self {
54            client_id,
55            data_type,
56            start,
57            end,
58            limit,
59            request_id,
60            ts_init,
61            params,
62        }
63    }
64}
65
66#[derive(Clone, Debug)]
67pub struct RequestInstrument {
68    pub instrument_id: InstrumentId,
69    pub start: Option<DateTime<Utc>>,
70    pub end: Option<DateTime<Utc>>,
71    pub client_id: Option<ClientId>,
72    pub request_id: UUID4,
73    pub ts_init: UnixNanos,
74    pub params: Option<IndexMap<String, String>>,
75}
76
77impl RequestInstrument {
78    /// Creates a new [`RequestInstrument`] instance.
79    #[allow(clippy::too_many_arguments)]
80    pub fn new(
81        instrument_id: InstrumentId,
82        start: Option<DateTime<Utc>>,
83        end: Option<DateTime<Utc>>,
84        client_id: Option<ClientId>,
85        request_id: UUID4,
86        ts_init: UnixNanos,
87        params: Option<IndexMap<String, String>>,
88    ) -> Self {
89        Self {
90            instrument_id,
91            start,
92            end,
93            client_id,
94            request_id,
95            ts_init,
96            params,
97        }
98    }
99}
100
101#[derive(Clone, Debug)]
102pub struct RequestInstruments {
103    pub start: Option<DateTime<Utc>>,
104    pub end: Option<DateTime<Utc>>,
105    pub client_id: Option<ClientId>,
106    pub venue: Option<Venue>,
107    pub request_id: UUID4,
108    pub ts_init: UnixNanos,
109    pub params: Option<IndexMap<String, String>>,
110}
111
112impl RequestInstruments {
113    /// Creates a new [`RequestInstruments`] instance.
114    #[allow(clippy::too_many_arguments)]
115    pub fn new(
116        start: Option<DateTime<Utc>>,
117        end: Option<DateTime<Utc>>,
118        client_id: Option<ClientId>,
119        venue: Option<Venue>,
120        request_id: UUID4,
121        ts_init: UnixNanos,
122        params: Option<IndexMap<String, String>>,
123    ) -> Self {
124        check_client_id_or_venue(&client_id, &venue);
125        Self {
126            start,
127            end,
128            client_id,
129            venue,
130            request_id,
131            ts_init,
132            params,
133        }
134    }
135}
136
137#[derive(Clone, Debug)]
138pub struct RequestBookSnapshot {
139    pub instrument_id: InstrumentId,
140    pub depth: Option<NonZeroUsize>,
141    pub client_id: Option<ClientId>,
142    pub request_id: UUID4,
143    pub ts_init: UnixNanos,
144    pub params: Option<IndexMap<String, String>>,
145}
146
147impl RequestBookSnapshot {
148    /// Creates a new [`RequestBookSnapshot`] instance.
149    #[allow(clippy::too_many_arguments)]
150    pub fn new(
151        instrument_id: InstrumentId,
152        depth: Option<NonZeroUsize>,
153        client_id: Option<ClientId>,
154        request_id: UUID4,
155        ts_init: UnixNanos,
156        params: Option<IndexMap<String, String>>,
157    ) -> Self {
158        Self {
159            instrument_id,
160            depth,
161            client_id,
162            request_id,
163            ts_init,
164            params,
165        }
166    }
167}
168
169#[derive(Clone, Debug)]
170pub struct RequestQuotes {
171    pub instrument_id: InstrumentId,
172    pub start: Option<DateTime<Utc>>,
173    pub end: Option<DateTime<Utc>>,
174    pub limit: Option<NonZeroUsize>,
175    pub client_id: Option<ClientId>,
176    pub request_id: UUID4,
177    pub ts_init: UnixNanos,
178    pub params: Option<IndexMap<String, String>>,
179}
180
181impl RequestQuotes {
182    /// Creates a new [`RequestQuotes`] instance.
183    #[allow(clippy::too_many_arguments)]
184    pub fn new(
185        instrument_id: InstrumentId,
186        start: Option<DateTime<Utc>>,
187        end: Option<DateTime<Utc>>,
188        limit: Option<NonZeroUsize>,
189        client_id: Option<ClientId>,
190        request_id: UUID4,
191        ts_init: UnixNanos,
192        params: Option<IndexMap<String, String>>,
193    ) -> Self {
194        Self {
195            instrument_id,
196            start,
197            end,
198            limit,
199            client_id,
200            request_id,
201            ts_init,
202            params,
203        }
204    }
205}
206
207#[derive(Clone, Debug)]
208pub struct RequestTrades {
209    pub instrument_id: InstrumentId,
210    pub start: Option<DateTime<Utc>>,
211    pub end: Option<DateTime<Utc>>,
212    pub limit: Option<NonZeroUsize>,
213    pub client_id: Option<ClientId>,
214    pub request_id: UUID4,
215    pub ts_init: UnixNanos,
216    pub params: Option<IndexMap<String, String>>,
217}
218
219impl RequestTrades {
220    /// Creates a new [`RequestTrades`] instance.
221    #[allow(clippy::too_many_arguments)]
222    pub fn new(
223        instrument_id: InstrumentId,
224        start: Option<DateTime<Utc>>,
225        end: Option<DateTime<Utc>>,
226        limit: Option<NonZeroUsize>,
227        client_id: Option<ClientId>,
228        request_id: UUID4,
229        ts_init: UnixNanos,
230        params: Option<IndexMap<String, String>>,
231    ) -> Self {
232        Self {
233            instrument_id,
234            start,
235            end,
236            limit,
237            client_id,
238            request_id,
239            ts_init,
240            params,
241        }
242    }
243}
244
245#[derive(Clone, Debug)]
246pub struct RequestBars {
247    pub bar_type: BarType,
248    pub start: Option<DateTime<Utc>>,
249    pub end: Option<DateTime<Utc>>,
250    pub limit: Option<NonZeroUsize>,
251    pub client_id: Option<ClientId>,
252    pub request_id: UUID4,
253    pub ts_init: UnixNanos,
254    pub params: Option<IndexMap<String, String>>,
255}
256
257impl RequestBars {
258    /// Creates a new [`RequestBars`] instance.
259    #[allow(clippy::too_many_arguments)]
260    pub fn new(
261        bar_type: BarType,
262        start: Option<DateTime<Utc>>,
263        end: Option<DateTime<Utc>>,
264        limit: Option<NonZeroUsize>,
265        client_id: Option<ClientId>,
266        request_id: UUID4,
267        ts_init: UnixNanos,
268        params: Option<IndexMap<String, String>>,
269    ) -> Self {
270        Self {
271            bar_type,
272            start,
273            end,
274            limit,
275            client_id,
276            request_id,
277            ts_init,
278            params,
279        }
280    }
281}