1+ use super :: super :: Datasets ;
12use crate :: commands:: TaskManager ;
23use crate :: error:: { Error , Result } ;
3- use crate :: shell:: commands:: Datasets ;
44use clap:: { Args , Subcommand } ;
55use dbn;
66use inquire:: Confirm ;
77use inquire:: { DateSelect , Select , Text } ;
8- use mbinary:: enums:: Dataset ;
98use std:: path:: PathBuf ;
109use std:: str:: FromStr ;
1110use std:: sync:: Arc ;
1211use time:: { format_description:: well_known:: Rfc3339 , OffsetDateTime } ;
1312use tokio:: sync:: Mutex ;
1413
14+ // Data options
15+ struct Dataset ;
16+
17+ impl Dataset {
18+ pub fn list ( ) -> Vec < & ' static str > {
19+ vec ! [
20+ "GLBX.MDP3" ,
21+ "XNAS.ITCH" ,
22+ "XBOS.ITCH" ,
23+ "XPSX.ITCH" ,
24+ "BATS.PITCH" ,
25+ "BATY.PITCH" ,
26+ "EDGA.PITCH" ,
27+ "EDGX.PITCH" ,
28+ "XNYS.PILLAR" ,
29+ "XCIS.PILLAR" ,
30+ "XASE.PILLAR" ,
31+ "XCHI.PILLAR" ,
32+ "XCIS.BBO" ,
33+ "XCIS.TRADES" ,
34+ "MEMX.MEMOIR" ,
35+ "EPRL.DOM" ,
36+ "OPRA.PILLAR" ,
37+ "DBEQ.BASIC" ,
38+ "ARCX.PILLAR" ,
39+ "IEXG.TOPS" ,
40+ "EQUS.PLUS" ,
41+ "XNYS.BBO" ,
42+ "XNYS.TRADES" ,
43+ "XNAS.QBBO" ,
44+ "XNAS.NLS" ,
45+ "IFEU.IMPACT" ,
46+ "NDEX.IMPACT" ,
47+ "EQUS.ALL" ,
48+ "XNAS.BASIC" ,
49+ "EQUS.SUMMARY" ,
50+ "XCIS.TRADESBBO" ,
51+ "XNYS.TRADESBBO" ,
52+ "EQUS.MINI" ,
53+ ]
54+ }
55+ }
56+ struct Schema ;
57+
58+ impl Schema {
59+ pub fn list ( ) -> Vec < & ' static str > {
60+ vec ! [
61+ "mbo" ,
62+ "mbp-1" ,
63+ "mbp-10" ,
64+ "tbbo" ,
65+ "trades" ,
66+ "bbo-1s" ,
67+ "bbo-1m" ,
68+ "ohlcv-1s" ,
69+ "ohlcv-1m" ,
70+ "ohlcv-1h" ,
71+ "ohlcv-1d" ,
72+ "ohlcv-eod" ,
73+ ]
74+ }
75+ }
76+
77+ struct SType ;
78+
79+ impl SType {
80+ pub fn list ( ) -> Vec < & ' static str > {
81+ vec ! [
82+ "instrument_id" ,
83+ "raw_symbol" ,
84+ "smart" ,
85+ "continuous" ,
86+ "parent" ,
87+ ]
88+ }
89+ }
90+
1591#[ derive( Debug , Args ) ]
1692pub struct DatabentoArgs {
1793 #[ command( subcommand) ]
@@ -36,36 +112,34 @@ impl DatabentoCommands {
36112 . map ( |opt| opt. to_string ( ) )
37113 . collect :: < Vec < String > > ( ) ; // Split by newline characters
38114
39- let start = DateSelect :: new ( "Start Date:" ) . prompt ( ) ?. to_string ( ) ;
40- let end = DateSelect :: new ( "End Date:" ) . prompt ( ) ?. to_string ( ) ;
115+ let mut start = DateSelect :: new ( "Start Date:" ) . prompt ( ) ?. to_string ( ) ;
116+ let mut end = DateSelect :: new ( "End Date:" ) . prompt ( ) ?. to_string ( ) ;
117+ println ! ( "Date {:?}" , start) ;
41118
42119 // Try to parse the datetime string as an OffsetDateTime
120+ start = format ! ( "{}T00:00:00Z" , start) ;
43121 let start_date = OffsetDateTime :: parse ( & start, & Rfc3339 ) . map_err ( |_| {
44122 Error :: DateError (
45123 "Error: Invalid start date format. Expected format: YYYY-MM-DD" . to_string ( ) ,
46124 )
47125 } ) ?;
48126
49127 // Try to parse the datetime string as an OffsetDateTime
128+ end = format ! ( "{}T00:00:00Z" , end) ;
50129 let end_date = OffsetDateTime :: parse ( & end, & Rfc3339 ) . map_err ( |_| {
51130 Error :: DateError (
52- "Error: Invalid start date format. Expected format: YYYY-MM-DD" . to_string ( ) ,
131+ "Error: Invalid end date format. Expected format: YYYY-MM-DD" . to_string ( ) ,
53132 )
54133 } ) ?;
55- let stype = Text :: new ( "Stype:" ) . prompt ( ) ?;
56- let schema = Text :: new ( "Schema:" ) . prompt ( ) ?;
57- let dataset = Text :: new ( "Dataset:" ) . prompt ( ) ?;
58-
59- // Convert `stype` to the correct type (e.g., dbn::SType)
60- let stype_enum = dbn:: SType :: from_str ( & stype)
61- . map_err ( |_| Error :: CustomError ( format ! ( "Invalid 'stype': {}" , stype) ) ) ?;
62- let schema_enum = dbn:: Schema :: from_str ( & schema)
63- . map_err ( |_| Error :: CustomError ( format ! ( "Invalid 'schema': {}" , stype) ) ) ?;
64- let dataset_enum = dbn:: Dataset :: from_str ( & dataset)
65- . map_err ( |_| Error :: CustomError ( format ! ( "Invalid 'dataset': {}" , stype) ) ) ?;
134+
135+ let schema =
136+ dbn:: Schema :: from_str ( Select :: new ( "Schema:" , Schema :: list ( ) ) . prompt ( ) ?) ?;
137+ let stype = dbn:: SType :: from_str ( Select :: new ( "Stype:" , SType :: list ( ) ) . prompt ( ) ?) ?;
138+ let dataset =
139+ dbn:: Dataset :: from_str ( Select :: new ( "Dataset:" , Dataset :: list ( ) ) . prompt ( ) ?) ?;
140+
66141 let approval = Confirm :: new ( "Approval on download : " )
67142 . with_default ( false )
68- . with_help_message ( "This data is stored for good reasons" )
69143 . prompt ( ) ?;
70144
71145 let dir_path = Text :: new ( "File Path:" ) . prompt ( ) ?;
@@ -75,9 +149,9 @@ impl DatabentoCommands {
75149 . await
76150 . download (
77151 & symbols,
78- & schema_enum ,
79- & dataset_enum ,
80- & stype_enum ,
152+ & schema ,
153+ & dataset ,
154+ & stype ,
81155 start_date,
82156 end_date,
83157 approval,
@@ -86,7 +160,7 @@ impl DatabentoCommands {
86160 . await ;
87161 }
88162 DatabentoCommands :: Transform => {
89- let dataset = Dataset :: from_str (
163+ let dataset = mbinary :: enums :: Dataset :: from_str (
90164 & Select :: new ( "Dataset:" , Datasets :: list ( ) )
91165 . prompt ( ) ?
92166 . to_lowercase ( ) ,
0 commit comments