use std::num::NonZeroUsize;
use chrono::{DateTime, Utc};
use nautilus_core::{Params, UUID4, UnixNanos};
use nautilus_model::{
data::{BarType, DataType},
identifiers::{ClientId, InstrumentId, Venue},
};
use ustr::Ustr;
use super::check_client_id_or_venue;
#[derive(Clone, Debug)]
pub struct RequestCustomData {
pub client_id: ClientId,
pub data_type: DataType,
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
pub limit: Option<NonZeroUsize>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestCustomData {
#[expect(clippy::too_many_arguments)]
pub fn new(
client_id: ClientId,
data_type: DataType,
start: Option<DateTime<Utc>>,
end: Option<DateTime<Utc>>,
limit: Option<NonZeroUsize>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
client_id,
data_type,
start,
end,
limit,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestInstrument {
pub instrument_id: InstrumentId,
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
pub client_id: Option<ClientId>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestInstrument {
pub fn new(
instrument_id: InstrumentId,
start: Option<DateTime<Utc>>,
end: Option<DateTime<Utc>>,
client_id: Option<ClientId>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
instrument_id,
start,
end,
client_id,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestInstruments {
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
pub client_id: Option<ClientId>,
pub venue: Option<Venue>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestInstruments {
pub fn new(
start: Option<DateTime<Utc>>,
end: Option<DateTime<Utc>>,
client_id: Option<ClientId>,
venue: Option<Venue>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
check_client_id_or_venue(&client_id, &venue);
Self {
start,
end,
client_id,
venue,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestBookSnapshot {
pub instrument_id: InstrumentId,
pub depth: Option<NonZeroUsize>,
pub client_id: Option<ClientId>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestBookSnapshot {
pub fn new(
instrument_id: InstrumentId,
depth: Option<NonZeroUsize>,
client_id: Option<ClientId>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
instrument_id,
depth,
client_id,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestQuotes {
pub instrument_id: InstrumentId,
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
pub limit: Option<NonZeroUsize>,
pub client_id: Option<ClientId>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestQuotes {
#[expect(clippy::too_many_arguments)]
pub fn new(
instrument_id: InstrumentId,
start: Option<DateTime<Utc>>,
end: Option<DateTime<Utc>>,
limit: Option<NonZeroUsize>,
client_id: Option<ClientId>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
instrument_id,
start,
end,
limit,
client_id,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestTrades {
pub instrument_id: InstrumentId,
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
pub limit: Option<NonZeroUsize>,
pub client_id: Option<ClientId>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestTrades {
#[expect(clippy::too_many_arguments)]
pub fn new(
instrument_id: InstrumentId,
start: Option<DateTime<Utc>>,
end: Option<DateTime<Utc>>,
limit: Option<NonZeroUsize>,
client_id: Option<ClientId>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
instrument_id,
start,
end,
limit,
client_id,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestFundingRates {
pub instrument_id: InstrumentId,
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
pub limit: Option<NonZeroUsize>,
pub client_id: Option<ClientId>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestFundingRates {
#[expect(clippy::too_many_arguments)]
pub fn new(
instrument_id: InstrumentId,
start: Option<DateTime<Utc>>,
end: Option<DateTime<Utc>>,
limit: Option<NonZeroUsize>,
client_id: Option<ClientId>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
instrument_id,
start,
end,
limit,
client_id,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestForwardPrices {
pub venue: Venue,
pub underlying: Ustr,
pub instrument_id: Option<InstrumentId>,
pub client_id: Option<ClientId>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestForwardPrices {
pub fn new(
venue: Venue,
underlying: Ustr,
instrument_id: Option<InstrumentId>,
client_id: Option<ClientId>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
venue,
underlying,
instrument_id,
client_id,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestBookDepth {
pub instrument_id: InstrumentId,
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
pub limit: Option<NonZeroUsize>,
pub depth: Option<NonZeroUsize>,
pub client_id: Option<ClientId>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestBookDepth {
#[expect(clippy::too_many_arguments)]
pub fn new(
instrument_id: InstrumentId,
start: Option<DateTime<Utc>>,
end: Option<DateTime<Utc>>,
limit: Option<NonZeroUsize>,
depth: Option<NonZeroUsize>,
client_id: Option<ClientId>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
instrument_id,
start,
end,
limit,
depth,
client_id,
request_id,
ts_init,
params,
}
}
}
#[derive(Clone, Debug)]
pub struct RequestBars {
pub bar_type: BarType,
pub start: Option<DateTime<Utc>>,
pub end: Option<DateTime<Utc>>,
pub limit: Option<NonZeroUsize>,
pub client_id: Option<ClientId>,
pub request_id: UUID4,
pub ts_init: UnixNanos,
pub params: Option<Params>,
}
impl RequestBars {
#[expect(clippy::too_many_arguments)]
pub fn new(
bar_type: BarType,
start: Option<DateTime<Utc>>,
end: Option<DateTime<Utc>>,
limit: Option<NonZeroUsize>,
client_id: Option<ClientId>,
request_id: UUID4,
ts_init: UnixNanos,
params: Option<Params>,
) -> Self {
Self {
bar_type,
start,
end,
limit,
client_id,
request_id,
ts_init,
params,
}
}
}