Improved error handling.

[?]
CrEcTsRjb1hHQjHuumqRfqdbVV4X58iLEubi4noaDPFa
Aug 2, 2021, 2:55 AM
53HEUVOVZQQCKIVT2NADM4PTGEMD5O7LJ3YGCPOIS54XXVTVDMVQC

Dependencies

  • [2] AY6BDSDQ Prepare for change in error handling.
  • [3] YAE43L6A Completed first try at UIData.
  • [4] XI5ALEH6 Take advantage of keytree FromStr functionality.
  • [5] AT753JPO Selected US unemployment series.
  • [6] UUD3CJZL Making error handling more comprehensive.
  • [7] 65C2F32D Generalized to any data source and parser.
  • [8] SPSFTMLR Completed loading ts_data from specification.
  • [9] 5POF332L Working on fn cpi_included().
  • [10] EHEK63WA Cleaning up ts.rs.
  • [11] PQKGZNQG Added class field to GraphicJson.
  • [12] TTR5IFSG Working on building generic TSSpec.
  • [13] TSY4YBBZ Changed ts Spec datastructures to new format.
  • [14] XPXYFEZM Finished code for building TSJson struct.
  • [15] K4CH53V4 Added GPL2 license, included missing source files.
  • [16] SAHJYVNB Removed checking functionality.
  • [17] GQVS55HI Finished generate_ts_spec() function.
  • [18] 2CCG6KUP Redo time-series spec.
  • [19] 5B2HBV3J Completed first try at ts Json data-structure.
  • [20] 77SIQZ3E Separating out spec generation.
  • [21] E2T2A74Y Added class field to GraphicSpec.
  • [22] PK7JY27R Integrate date_range with transforms.
  • [23] R2OU7BE4 Added min and max values to json.
  • [*] 4MG5JFXT First record.

Change contents

  • replacement in src/ui.rs at line 48
    [3.800][3.63:109](),[3.109][3.849:937](),[3.849][3.849:937]()
    serialize_to_json_failed(
    file!(),
    line!(),
    )
    [3.800]
    [3.937]
    err(file!(), line!(), &format!("Serialize to JSON failed."))
  • replacement in src/ui.rs at line 142
    [3.1760][3.1760:1798](),[3.1798][3.322:356](),[3.356][3.1835:1964](),[3.1835][3.1835:1964]()
    Err(err) => { return Err(
    read_file_failed(
    file!(),
    line!(),
    &err.to_string()
    ))
    },
    [3.1760]
    [3.1964]
    Err(_) => { return Err(
    err(file!(), line!(), &format!("Failed to read file {}", path))
    )},
  • replacement in src/ui.rs at line 147
    [3.1647][3.1647:1727](),[3.1727][3.357:414]()
    let out = kt.to_ref().try_into().map_err(|err: keytree::error::Error| {
    external(file!(), line!(), &err.to_string())
    [3.2031]
    [3.1728]
    let out = kt.to_ref().try_into().map_err(|e: keytree::error::Error| {
    err(file!(), line!(), &e.to_string())
  • replacement in src/ui.rs at line 181
    [3.2926][3.531:588](),[3.588][3.2989:3134](),[3.2989][3.2989:3134]()
    return Err(series_lookup_failed(
    file!(),
    line!(),
    &x.to_string(),
    ))
    [3.2926]
    [3.3134]
    return Err(err(file!(), line!(), &format! ("Series {} lookup failed.", y)))
  • replacement in src/ui.rs at line 190
    [3.3360][3.682:739](),[3.739][3.3423:3568](),[3.3423][3.3423:3568]()
    return Err(series_lookup_failed(
    file!(),
    line!(),
    &y.to_string(),
    ))
    [3.3360]
    [3.3568]
    return Err(err(file!(), line!(), &format! ("Series {} lookup failed.", y)))
  • replacement in src/ui.rs at line 197
    [3.791][3.791:875]()
    .map_err(|err| external(file!(), line!(), &err.to_string()))?;
    [3.791]
    [3.2120]
    .map_err(|e| err(file!(), line!(), &e.to_string()))?;
  • replacement in src/ts.rs at line 31
    [3.320][3.320:351](),[3.351][3.1280:1326](),[3.1326][3.400:526](),[3.400][3.400:526]()
    .map_err(|_| {
    serialize_to_json_failed(
    file!(),
    line!(),
    )
    })?;
    [3.320]
    [3.526]
    .map_err(|_| err(file!(), line!(), "Failed to serialize JSON."))?;
  • replacement in src/ts.rs at line 87
    [3.7233][3.7233:7271](),[3.7271][3.1726:1760](),[3.1760][3.7308:7437](),[3.7308][3.7308:7437]()
    Err(err) => { return Err(
    read_file_failed(
    file!(),
    line!(),
    &err.to_string()
    ))
    },
    [3.7233]
    [3.7437]
    Err(e) => { return Err(
    err(file!(), line!(), &format!("Failed to read {}.", e))
    )},
  • replacement in src/ts.rs at line 94
    [3.1764][3.1764:1912]()
    let mut spec: Spec = kt.to_ref().try_into().map_err(|err: keytree::error::Error| {
    external(file!(), line!(), &err.to_string())
    [3.1764]
    [3.1912]
    let mut spec: Spec = kt.to_ref().try_into().map_err(|e: keytree::error::Error| {
    err(file!(), line!(), &e.to_string())
  • replacement in src/ts.rs at line 170
    [3.864][3.864:932]()
    return Err(expected_graphic_has_one_series(
    [3.864]
    [3.932]
    return Err(err(
  • replacement in src/ts.rs at line 173
    [3.1006][3.1006:1144]()
    &country.to_string(),
    &data_type.to_string(),
    *index,
    [3.1006]
    [3.1144]
    &format!("Expected graphic ({} {} {}) to have one series.",
    country,
    data_type,
    index,
    ),
  • replacement in src/ts.rs at line 204
    [3.1540][3.2876:2937]()
    return Err(series_lookup_failed(
    [3.1540]
    [3.1607]
    return Err(err(
  • replacement in src/ts.rs at line 207
    [3.1689][3.1689:1745]()
    &series_id.to_string(),
    [3.1689]
    [3.1745]
    &format!("Failed to lookup {}.", &series_id.to_string()),
  • replacement in src/ts.rs at line 356
    [3.2570][3.3849:3891](),[3.3891][3.2618:2755](),[3.2618][3.2618:2755]()
    series_lookup_failed(
    file!(),
    line!(),
    &series_id.to_string() ,
    )
    [3.2570]
    [3.2755]
    err(file!(), line!(), &format!("Series {} lookup failed.", series_id.to_string()))
  • replacement in src/ts.rs at line 432
    [3.4171][3.4171:4248]()
    _ => Err(external(file!(), line!(), "Failed to parse to Text")),
    [3.4171]
    [3.1247]
    _ => Err(err(file!(), line!(), &format!("Failed to parse {}.", s))),
  • replacement in src/ts.rs at line 479
    [3.1840][3.4657:4749]()
    _ => Err(external(file!(), line!(), "Failed to parse GraphicClass")),
    [3.1840]
    [3.1208]
    _ => Err(err(file!(), line!(), "Failed to parse GraphicClass")),
  • replacement in src/ts.rs at line 576
    [3.3657][3.5179:5261]()
    _ => Err(parse_transform1_failed(file!(), line!(), s)),
    [3.3657]
    [3.3732]
    _ => Err(err(file!(), line!(), &format!("Could not parse {}", s))),
  • replacement in src/parser.rs at line 75
    [3.6820][3.6820:7018]()
    parse_datepoint_failed(
    file!(),
    line!(),
    &line.to_string(),
    &format!("{}, {}", obs.date, obs.value),
    [3.6820]
    [3.7018]
    err(
    file!(), line!(),
    &format!( "Failed to parse {}, {} at line {}.", obs.date, obs.value, &line),
  • replacement in src/parser.rs at line 83
    [3.7124][3.7124:7322]()
    parse_datepoint_failed(
    file!(),
    line!(),
    &line.to_string(),
    &format!("{}, {}", obs.date, obs.value),
    [3.7124]
    [3.7322]
    err(file!(), line!(),
    &format!("Failed to parse {}, {} at line {}.",
    obs.date,
    obs.value,
    &line.to_string(),
    ),
  • replacement in src/parser.rs at line 99
    [3.7613][3.7613:7851]()
    parse_datepoint_failed(
    file!(),
    line!(),
    &line.to_string(),
    &format!("{}, {}", obs.date, obs.value),
    [3.7613]
    [3.7851]
    err(
    file!(), line!(),
    &format!("Failed to parse {}, {} at line {}.",
    obs.date,
    obs.value,
    &line,
    ),
  • replacement in src/parser.rs at line 134
    [3.8641][3.8641:8822]()
    Err(err) => {
    return Err(fred_error(
    file!(),
    line!(),
    &err.to_string(),
    ))
    [3.8641]
    [3.8822]
    Err(e) => {
    return Err(err(file!(), line!(), &e.to_string()))
  • replacement in src/parser.rs at line 148
    [3.9177][3.9177:9391]()
    expected_datapoint_found_dot(
    file!(),
    line!(),
    &format!("{}, {}", obs.date, obs.value),
    &(line_num + 1).to_string(),
    [3.9177]
    [3.9391]
    err(file!(), line!(),
    &format!("Expected datapoint found dot from obs: {}, {} at line {}.",
    obs.date,
    obs.value,
    &(line_num + 1).to_string(),
    ),
  • replacement in src/parser.rs at line 162
    [3.9548][3.9548:9648]()
    .map_err(|err: time_series::error::Error| external(file!(), line!(), &err.to_string()))
    [3.9548]
    [3.9648]
    .map_err(|e: time_series::error::Error| err(file!(), line!(), &e.to_string()))
  • replacement in src/parser.rs at line 195
    [3.10605][3.10605:10693]()
    Err(err) => { return Err(fred_error(file!(), line!(), &err.to_string())) },
    [3.10605]
    [3.10693]
    Err(e) => { return Err(err(file!(), line!(), &e.to_string())) },
  • replacement in src/parser.rs at line 223
    [3.11522][3.11522:11841]()
    .map_err(|err| {
    expected_regular_time_series(
    file!(),
    line!(),
    &series_spec.country().to_string(),
    &series_spec.data_type.to_string(),
    &series_spec.series_id.to_string(),
    )
    [3.11522]
    [3.11841]
    .map_err(|_| {
    err(file!(), line!(), &format!("Expected regular time-series ({} {} {})",
    &series_spec.country(),
    &series_spec.data_type,
    &series_spec.series_id,
    ))
  • edit in src/lib.rs at line 184
    [3.12417][3.12417:12463]()
    use keytree::error::keytree_selection_failed;
  • replacement in src/lib.rs at line 200
    [3.12691][3.12691:12831]()
    parse_datepoint_failed(
    file!(),
    line!(),
    "?",
    s,
    )
    [3.12691]
    [3.12831]
    err(file!(), line!(), &format!("Parse datapoint {} failed", s))
  • replacement in src/lib.rs at line 204
    [3.12895][3.12895:13035]()
    parse_datepoint_failed(
    file!(),
    line!(),
    "?",
    s,
    )
    [3.12895]
    [3.13035]
    err(file!(), line!(), &format!("Parse datapoint {} failed", s))
  • replacement in src/lib.rs at line 337
    [3.3347][3.13050:13122]()
    _ => Err(parse_datatype_failed(file!(), line!(), s)),
    [3.3347]
    [3.15738]
    _ => Err(err(file!(), line!(), &format!("Failed to parse datatype {}.", s))),
  • replacement in src/lib.rs at line 362
    [3.17170][3.13046:13130]()
    Err(err) => { return Err(fred_error(file!(), line!(), &err.to_string())) },
    [3.17170]
    [3.17258]
    Err(e) => { return Err(err(file!(), line!(), &e.to_string())) },
  • replacement in src/lib.rs at line 550
    [3.684][3.14043:14081](),[3.14081][3.13940:13974](),[3.13974][3.14118:14247](),[3.14118][3.14118:14247]()
    Err(err) => { return Err(
    read_file_failed(
    file!(),
    line!(),
    &err.to_string()
    ))
    },
    [3.684]
    [3.763]
    Err(e) => { return Err(
    err(file!(), line!(), &format!("Failed to read file {}.", e))
    )},
  • replacement in src/lib.rs at line 555
    [3.6131][3.14248:14318](),[3.14318][3.13975:14032]()
    kt.to_ref().try_into().map_err(|err: keytree::error::Error| {
    external(file!(), line!(), &err.to_string())
    [3.6131]
    [3.14380]
    kt.to_ref().try_into().map_err(|e: keytree::error::Error| {
    err(file!(), line!(), &e.to_string())
  • replacement in src/lib.rs at line 766
    [3.7247][3.7247:7325](),[3.7325][3.16558:16600](),[3.16600][3.7372:7607](),[3.7372][3.7372:7607]()
    Err(err) => {
    return Err(
    external(
    file!(),
    line!(),
    &err.to_string(),
    )
    )
    },
    [3.7247]
    [3.7607]
    Err(e) => { return Err(err(file!(), line!(), &e.to_string())) },
  • replacement in src/lib.rs at line 780
    [3.16679][3.5648:5738](),[3.5648][3.5648:5738]()
    .map_err(|err| {
    external(file!(), line!(), &err.to_string())
    [3.16679]
    [3.5738]
    .map_err(|e| {
    err(file!(), line!(), &e.to_string())
  • replacement in src/lib.rs at line 785
    [3.5788][3.5788:5905]()
    .map_err(|err: time_series::error::Error| {
    external(file!(), line!(), &err.to_string())
    [3.5788]
    [3.5905]
    .map_err(|e: time_series::error::Error| {
    err(file!(), line!(), &e.to_string())
  • replacement in src/lib.rs at line 822
    [3.17546][3.17546:17631]()
    .map_err(|err| create_dir_failed( file!(), line!(), &err.to_string()))?;
    [3.17546]
    [3.10006]
    .map_err(|e| err(file!(), line!(), &format!("Failed to create dir {}.", e)))?;
  • replacement in src/lib.rs at line 825
    [3.17687][3.17687:17762]()
    .map_err(|err| external(file!(), line!(), &err.to_string()))?;
    [3.17687]
    [3.10200]
    .map_err(|e| err(file!(), line!(), &e.to_string()))?;
  • replacement in src/lib.rs at line 834
    [3.17827][3.17827:17902]()
    .map_err(|err| external(file!(), line!(), &err.to_string()))?;
    [3.17827]
    [3.17902]
    .map_err(|e| err(file!(), line!(), &e.to_string()))?;
  • replacement in src/lib.rs at line 837
    [3.17974][3.17974:18054]()
    expected_series_data(file!(), line!(), &self.series_id.to_string())
    [3.17974]
    [3.18054]
    err(file!(), line!(), &format!("Expected series data for {}", self.series_id))
  • replacement in src/lib.rs at line 850
    [3.18635][3.18635:18710]()
    .map_err(|err| external(file!(), line!(), &err.to_string()))?;
    [3.18635]
    [3.11324]
    .map_err(|e| err(file!(), line!(), &e.to_string()))?;
  • replacement in src/lib.rs at line 853
    [3.18764][3.18764:18849]()
    .map_err(|err| create_dir_failed( file!(), line!(), &err.to_string()))?;
    [3.18764]
    [3.18849]
    .map_err(|e| err(file!(), line!(), &format!("Failed to create dir {}", e)))?;
  • replacement in src/lib.rs at line 859
    [3.18974][3.18974:19049]()
    .map_err(|err| external(file!(), line!(), &err.to_string()))?;
    [3.18974]
    [3.11601]
    .map_err(|e| err(file!(), line!(), &e.to_string()))?;
  • replacement in src/lib.rs at line 943
    [3.20015][2.822:913]()
    (true, true) => Err(custom(file!(), line!(), "Only one parser allowed."))?,
    [3.20015]
    [3.20096]
    (true, true) => Err(keytree::error::err(file!(), line!(), "Only one parser allowed."))?,
  • replacement in src/lib.rs at line 1070
    [3.20561][3.20561:20704]()
    parse_graphic_range_failed(
    file!(),
    line!(),
    s
    ))
    [3.20561]
    [3.20704]
    err(file!(), line!(), &format!("Parse graphic range {} failed", s)))
  • replacement in src/lib.rs at line 1073
    [3.20752][3.20752:20828]()
    .map_err(|_| parse_graphic_range_failed(file!(), line!(), s))?;
    [3.20752]
    [3.20828]
    .map_err(|_| err(file!(), line!(), &format!("Parse graphic range {} failed", s)))?;
  • replacement in src/lib.rs at line 1076
    [3.20866][3.20866:20942]()
    .map_err(|_| parse_graphic_range_failed(file!(), line!(), s))?;
    [3.20866]
    [3.20942]
    .map_err(|_| err(file!(), line!(), &format!("Parse graphic range {} failed", s)))?;
  • edit in src/fred.rs at line 94
    [3.8582][3.8582:8663](),[3.8663][3.21686:21731](),[3.21731][3.8708:8875](),[3.8708][3.8708:8875]()
    },
    Err(err) => {
    return Err(
    fred_request_failed(
    file!(),
    line!(),
    &err.to_string()
    )
    )
  • edit in src/fred.rs at line 95
    [3.8894]
    [3.8894]
    Err(e) => { return Err(err( file!(), line!(), &e.to_string())) },
  • edit in src/fred.rs at line 139
    [3.10421][3.10421:10502](),[3.10502][3.21810:21855](),[3.21855][3.10547:10714](),[3.10547][3.10547:10714]()
    },
    Err(err) => {
    return Err(
    fred_request_failed(
    file!(),
    line!(),
    &err.to_string()
    )
    )
  • edit in src/fred.rs at line 140
    [3.10733]
    [3.10733]
    Err(e) => { return Err(err(file!(), line!(), &e.to_string())) },
  • edit in src/error.rs at line 10
    [3.14778][3.14778:14781](),[3.14781][3.22205:22443](),[3.22443][3.14785:14927](),[3.14785][3.14785:14927](),[3.14927][3.22444:22509](),[3.22509][3.14995:15073](),[3.14995][3.14995:15073](),[3.15073][3.22510:22812](),[3.22812][3.1350:1421](),[3.15073][3.1350:1421](),[3.1421][3.4416:4503](),[3.4503][3.1450:1471](),[3.1450][3.1450:1471](),[3.1471][3.22813:22903](),[3.4597][3.1553:1591](),[3.22903][3.1553:1591](),[3.1553][3.1553:1591](),[3.1591][3.4598:4649](),[3.4649][3.22904:23172](),[3.1591][3.15073:15196](),[3.4649][3.15073:15196](),[3.23172][3.15073:15196](),[3.15073][3.15073:15196](),[3.15217][3.15217:15236](),[3.15236][3.9168:9189](),[3.9189][3.15236:15287](),[3.15236][3.15236:15287](),[3.15287][3.23173:23247](),[3.1669][3.15364:15402](),[3.23247][3.15364:15402](),[3.15364][3.15364:15402](),[3.15402][3.9190:9207](),[3.9207][3.15402:15421](),[3.15402][3.15402:15421](),[3.15438][3.15438:15457](),[3.15457][3.9208:9321](),[3.9321][3.23248:23288](),[3.1713][3.9364:9415](),[3.23288][3.9364:9415](),[3.9364][3.9364:9415](),[3.9415][3.15457:15467](),[3.15457][3.15457:15467](),[3.15467][3.23289:23308](),[3.23308][3.15499:15520](),[3.15499][3.15499:15520](),[3.15520][3.23309:23338](),[3.23338][3.15564:15585](),[3.15564][3.15564:15585](),[3.15585][3.23339:23378](),[3.1771][3.15642:15680](),[3.23378][3.15642:15680](),[3.15642][3.15642:15680](),[3.15693][3.15693:15703](),[3.15703][3.23379:23407](),[3.23407][3.15736:15822](),[3.15736][3.15736:15822](),[3.15822][3.23408:23462](),[3.1840][3.15890:15951](),[3.23462][3.15890:15951](),[3.15890][3.15890:15951](),[3.15951][3.23463:23491](),[3.23491][3.15983:16004](),[3.15983][3.15983:16004](),[3.16004][3.23492:23521](),[3.23521][3.16053:16074](),[3.16053][3.16053:16074](),[3.16074][3.23522:23570](),[3.1897][3.16130:16168](),[3.23570][3.16130:16168](),[3.16130][3.16130:16168](),[3.16187][3.16187:16197](),[3.16197][3.23571:23600](),[3.23600][3.9670:9762](),[3.9670][3.9670:9762](),[3.9762][3.23601:23677](),[3.1977][3.9841:9898](),[3.3648][3.9841:9898](),[3.23677][3.9841:9898](),[3.9841][3.9841:9898](),[3.3853][3.3853:3863](),[3.3863][3.23678:23703](),[3.23703][3.16230:16321](),[3.16230][3.16230:16321](),[3.16321][3.23704:23757](),[3.2095][3.16378:16416](),[3.23757][3.16378:16416](),[3.16378][3.16378:16416](),[3.16416][3.23758:23777](),[3.23777][3.16434:16444](),[3.16434][3.16434:16444](),[3.16444][3.23778:23812](),[3.23812][3.16467:16538](),[3.16467][3.16467:16538](),[3.16538][3.23813:23869](),[3.2138][3.16580:16628](),[3.23869][3.16580:16628](),[3.16580][3.16580:16628](),[3.16632][3.16632:16737](),[3.16737][3.23870:23913](),[3.2185][3.16783:16844](),[3.23913][3.16783:16844](),[3.16783][3.16783:16844](),[3.16848][3.16848:16987](),[3.16987][3.23914:23973](),[3.2248][3.17049:17137](),[3.23973][3.17049:17137](),[3.17049][3.17049:17137](),[3.17137][3.23974:24004](),[3.24004][3.17159:17200](),[3.17159][3.17159:17200](),[3.17200][3.24005:24027](),[3.24027][3.17224:17245](),[3.17224][3.17224:17245](),[3.17245][3.24028:24098](),[3.2297][3.17293:17331](),[3.24098][3.17293:17331](),[3.17293][3.17293:17331](),[3.17331][3.24099:24110](),[3.24110][3.17343:17353](),[3.17343][3.17343:17353](),[3.17353][3.24111:24142](),[3.24142][3.17380:17421](),[3.17380][3.17380:17421](),[3.17421][3.24143:24190](),[3.24190][3.17445:17464](),[3.17445][3.17445:17464](),[3.17464][3.24191:24275](),[3.2371][3.17537:17575](),[3.24275][3.17537:17575](),[3.17537][3.17537:17575](),[3.17575][3.24276:24307](),[3.24307][3.17586:17596](),[3.17586][3.17586:17596](),[3.17600][3.17600:17798](),[3.17798][3.24308:24387](),[3.2454][3.17880:18012](),[3.24387][3.17880:18012](),[3.17880][3.17880:18012](),[3.18012][3.24388:24423](),[3.24423][3.18035:18098](),[3.18035][3.18035:18098](),[3.18098][3.24424:24426](),[3.24426][3.18101:18120](),[3.18101][3.18101:18120](),[3.18120][3.24427:24487](),[3.2524][3.18189:18248](),[3.24487][3.18189:18248](),[3.18189][3.18189:18248](),[3.18248][3.24488:24516](),[3.24516][3.18276:18360](),[3.18276][3.18276:18360](),[3.18360][3.24517:24576](),[3.2599][3.18434:18472](),[3.24576][3.18434:18472](),[3.18434][3.18434:18472](),[3.18472][3.24577:24587](),[3.24587][3.18483:18493](),[3.18483][3.18483:18493](),[3.18493][3.24588:24619](),[3.24619][3.18522:18606](),[3.18522][3.18522:18606](),[3.18606][3.24620:24691](),[3.2675][3.18681:18740](),[3.24691][3.18681:18740](),[3.18681][3.18681:18740](),[3.18740][3.24692:24724](),[3.24724][3.18769:18853](),[3.18769][3.18769:18853](),[3.18853][3.24725:24797](),[3.2751][3.18928:18987](),[3.24797][3.18928:18987](),[3.18928][3.18928:18987](),[3.18987][3.24798:24830](),[3.24830][3.19025:19066](),[3.19025][3.19025:19066](),[3.19066][3.24831:24853](),[3.24853][3.19096:19117](),[3.19096][3.19096:19117](),[3.19117][3.24854:24926](),[3.2813][3.19178:19216](),[3.24926][3.19178:19216](),[3.19178][3.19178:19216](),[3.19216][3.24927:24938](),[3.24938][3.19235:19245](),[3.19235][3.19235:19245](),[3.19245][3.24939:24973](),[3.24973][3.19279:19320](),[3.19279][3.19279:19320](),[3.19320][3.24974:25004](),[3.25004][3.19368:19389](),[3.19368][3.19368:19389](),[3.19389][3.25005:25063](),[3.2924][3.19499:19556](),[3.25063][3.19499:19556](),[3.19499][3.19499:19556](),[3.19572][3.19572:19579]()
    }
    pub fn create_dir_failed(
    code_file: &str,
    code_line: u32,
    msg: &str) -> Error
    {
    Error(format!(
    "[ui_data::{}:{}] Failed to create dir with msg: [{}].",
    code_file,
    code_line,
    msg,
    ))
    }
    pub fn data_type_mismatch(
    code_file: &str,
    code_line: u32,
    data_type1: &str,
    data_type2: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Datatypes [{}] and [{}] do not match.",
    code_file,
    code_line,
    data_type1,
    data_type2,
    ))
    }
    pub fn expected_datapoint_found_dot(
    code_file: &str,
    code_line: u32,
    line_num: &str,
    line_str: &str) -> Error
    {
    Error(format!(
    "[ui*date:{}:{}] Line [{}] is [{}] but expected datapoint.]",
    code_file,
    code_line,
    line_num,
    line_str,
    ))
    }
    pub fn expected_graphic_has_one_series(
    code_file: &str,
    code_line: u32,
    country: &str,
    data_type: &str,
    index: usize) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] [{} {} {}] Expected source graphic to have exactly one series.",
    code_file,
    code_line,
    country,
    data_type,
    index,
    ))
    }
    pub fn expected_series_data(
    code_file: &str,
    code_line: u32,
    series_id: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Expected series data from series [{}] but was empty.",
    code_file,
    code_line,
    series_id,
    ))
    }
    /// Handle error from time-series.
    pub fn expected_regular_time_series(
    code_file: &str,
    code_line: u32,
    country: &str,
    data_type: &str,
    series_id: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Expected regular time-series from [{} {} {}].",
    code_file,
    code_line,
    country,
    data_type,
    series_id,
    ))
    }
    pub fn external(
    code_file: &str,
    code_line: u32,
    msg: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] External: {}",
    code_file,
    code_line,
    msg,
    ))
    }
    pub fn file_error(
    code_file: &str,
    code_line: u32) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] File error.",
    code_file,
    code_line,
    ))
    }
    pub fn fred_request_failed(
    code_file: &str,
    code_line: u32,
    msg: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}]{}] Fred request failed: [{}].",
    code_file,
    code_line,
    msg,
    ))
    }
    pub fn into_keytree_failed(
    code_file: &str,
    code_line: u32) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Into keytree failed.",
    code_file,
    code_line,
    ))
    }
    pub fn series_lookup_failed(
    code_file: &str,
    code_line: u32,
    series_id: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Could not find graphic reference [{}] in series.",
    code_file,
    code_line,
    series_id,
    ))
    }
    pub fn read_file_failed(
    code_file: &str,
    code_line: u32,
    filename: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to read file [{}].",
    code_file,
    code_line,
    filename,
    ))
    }
    pub fn serialize_to_json_failed(
    code_file: &str,
    code_line: u32) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to serialize to json.",
    code_file,
    code_line,
    ))
    }
    pub fn fred_error(
    code_file: &str,
    code_line: u32,
    msg: &str) -> Error
    {
    Error(format!(
    "ui_data:{}:{}] Fred error [{}].",
    code_file,
    code_line,
    msg,
    ))
    }
    pub fn key_not_in_dataspec(
    code_file: &str,
    code_line: u32,
    data_type: &str,
    country: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Key [({}, {})] not in dataspec.",
    code_file,
    code_line,
    data_type,
    country,
    ))
    }
    ///
    pub fn parse_datatype_failed(
    code_file: &str,
    code_line: u32,
    s: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to parse datatype from string [{}].",
    code_file,
    code_line,
    s,
    ))
    }
    pub fn parse_datepoint_failed(
    code_file: &str,
    code_line: u32,
    line: &str,
    obs_str: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to parse datepoint at line [{}] from string [{}].",
    code_file,
    code_line,
    line,
    obs_str,
    ))
    }
    pub fn parse_fred_value_failed(
    code_file: &str,
    code_line: u32,
    data_type: &str,
    country: &str,
    series: &str,
    line_str: &str,
    line: usize) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] [{} {} {}] Parse Fred value [{}] failed on line {}.",
    code_file,
    code_line,
    data_type,
    country,
    series,
    line_str,
    line,
    ))
    }
    pub fn parse_graphic_range_failed(
    code_file: &str,
    code_line: u32,
    s: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Parse graphic range [{}] failed.",
    code_file,
    code_line,
    s,
    ))
    }
    pub fn parse_parser_failed(
    code_file: &str,
    code_line: u32,
    s: &str) -> Error
    {
    Error(format!(
    "[ui_data::{}:{}] Parse parser type [{}] failed.",
    code_file,
    code_line,
    s
    ))
    }
    pub fn parse_timestamp_failed(
    code_file: &str,
    code_line: u32,
    s: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to parse timestamp from string [{}].",
    code_file,
    code_line,
    s,
    ))
    }
    pub fn parse_transform1_failed(
    code_file: &str,
    code_line: u32,
    s: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to parse transform1 from string [{}].",
    code_file,
    code_line,
    s,
    ))
    }
    pub fn parse_transform2_failed(
    code_file: &str,
    code_line: u32,
    s: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to parse transform2 from string [{}].",
    code_file,
    code_line,
    s,
    ))
    }
    pub fn series_id_not_in_dataspec(
    code_file: &str,
    code_line: u32,
    series_id: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] SeriesId [{}] not in DataSpec.",
    code_file,
    code_line,
    series_id,
    ))
  • replacement in src/error.rs at line 12
    [3.19586][3.19586:19703]()
    pub fn series_is_empty(
    code_file: &str,
    code_line: u32,
    country: &str,
    data_type: &str) -> Error
    {
    [3.19582]
    [3.19703]
    pub fn err(code_file: &str, code_line: u32, msg: &str) -> Error {
  • replacement in src/error.rs at line 14
    [3.19722][3.25064:25116]()
    "[ui_data:{}:{}] Series [{} {}] is empty.",
    [3.19722]
    [3.19777]
    "[ui_data:{}:{}] {}",
  • edit in src/error.rs at line 17
    [3.19815][3.19815:19860](),[3.19861][3.9416:9417](),[3.19866][3.19866:20049](),[3.20049][3.25117:25208](),[3.3075][3.20143:20236](),[3.25208][3.20143:20236](),[3.20143][3.20143:20236]()
    country,
    data_type,
    ))
    }
    pub fn time_series_from_csv_failed(
    code_file: &str,
    code_line: u32,
    data_type: &str,
    country: &str,
    series_id: &str,
    msg: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to parse time-series from csv [{} {} {}] with msg: [{}].",
    code_file,
    code_line,
    data_type,
    country,
    series_id,
  • edit in src/error.rs at line 20
    [3.20258][3.20258:20259](),[3.20259][3.25209:25445](),[3.25445][3.9419:9420](),[3.9419][3.9419:9420]()
    pub fn write_file_failed(
    code_file: &str,
    code_line: u32,
    filename: &str) -> Error
    {
    Error(format!(
    "[ui_data:{}:{}] Failed to write file [{}].",
    code_file,
    code_line,
    filename,
    ))
    }