diff --git a/Cargo.lock b/Cargo.lock index ae1212e..6aefd15 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,6 +13,15 @@ dependencies = [ "version_check", ] +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + [[package]] name = "arrayvec" version = "0.7.6" @@ -57,7 +66,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -96,9 +105,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -140,18 +149,18 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "indexmap" -version = "2.11.3" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92119844f513ffa41556430369ab02c295a3578af21cf945caa3e9e0c2481ac3" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", ] [[package]] @@ -162,9 +171,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.78" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -172,21 +181,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" - -[[package]] -name = "log" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "num-integer" @@ -211,6 +214,7 @@ name = "oddsidizer" version = "0.1.0" dependencies = [ "num-integer", + "pretty-readme", "rust_decimal", "rust_decimal_macros", ] @@ -230,20 +234,32 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "pretty-readme" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241f6a37335987e17e6030deb400ef373cc028bbdc5722c5ee8b807c33d7568f" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 2.0.109", +] + [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -270,9 +286,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -313,6 +329,35 @@ dependencies = [ "getrandom", ] +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + [[package]] name = "rend" version = "0.4.2" @@ -353,9 +398,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.38.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8975fc98059f365204d635119cf9c5a60ae67b841ed49b5422a9a7e56cdfac0" +checksum = "35affe401787a9bd846712274d97654355d21b2a2c092a3139aabe31e9022282" dependencies = [ "arrayvec", "borsh", @@ -369,12 +414,12 @@ dependencies = [ [[package]] name = "rust_decimal_macros" -version = "1.38.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dae310b657d2d686616e215c84c3119c675450d64c4b9f9e3467209191c3bcf" +checksum = "ae8c0cb48f413ebe24dc2d148788e0efbe09ba3e011d9277162f2eaf8e1069a3" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -397,31 +442,31 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", ] [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] [[package]] @@ -456,9 +501,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" dependencies = [ "proc-macro2", "quote", @@ -488,26 +533,39 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml_datetime" -version = "0.6.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] [[package]] name = "toml_edit" -version = "0.22.27" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ "indexmap", "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ "winnow", ] [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "uuid" @@ -533,9 +591,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" -version = "0.2.101" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", @@ -544,25 +602,11 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.101" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn 2.0.106", - "wasm-bindgen-shared", -] - [[package]] name = "wasm-bindgen-macro" -version = "0.2.101" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -570,22 +614,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.101" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ + "bumpalo", "proc-macro2", "quote", - "syn 2.0.106", - "wasm-bindgen-backend", + "syn 2.0.109", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.101" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] @@ -625,5 +669,5 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.109", ] diff --git a/Cargo.toml b/Cargo.toml index f030283..f29af6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,4 @@ edition = "2024" num-integer = "0.1" rust_decimal = "1" rust_decimal_macros = "1" +pretty-readme = "0.1" diff --git a/README.md b/README.md index 2c179bf..f89ca69 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Oddsidizer -Rust library with tools for converting and formatting data around betting: +A rust library with tools for converting and formatting data around betting: 1. odds: american, decimal and fractional, formats producing pretty and traditional fractions for display, 2. race distance (miles, furlongs, yards). @@ -11,12 +11,217 @@ Rust library with tools for converting and formatting data around betting: * Uses lookup tables * Performs fractional rounding -## IMPORTANT NOTES +### IMPORTANT NOTES * Keep in mind that when using lookup tables feature: * conversion from 1.67 or -150 gives 4/6 instead of 2/3 * conversion from 2.5 or 150 gives 6/4 instead of 3/2 - These are traditional values in UK. + These are traditional values in the UK. -* Disabling fractional rounding it but leaving lookup tables enabled can still return pre-defined rounded results (f. ex. 1.33 -> 1/3). +* Disabling fractional rounding but leaving lookup tables enabled can still return pre-defined rounded results (f. ex. 1.33 -> 1/3). + +## Usage + +### `Odds` + +The [`Odds`] enum is a convenient wrapper that holds an odds value in any of the three formats. It provides methods to easily convert to any other format. + +```rust +use rust_decimal_macros::dec; +use oddsidizer::{Odds, ConversionConfig}; + +// --- Creating Odds --- +// Use `From` or `Into` to create instances +let american_odds = Odds::from(-150); +let decimal_odds: Odds = dec!(1.25).into(); +let fractional_odds = Odds::from((1, 4)); + +// --- Easy Conversions --- +// Convert to any format using default config +assert_eq!(american_odds.to_decimal().unwrap(), dec!(1.67)); // Uses lookup +assert_eq!(decimal_odds.to_american().unwrap(), -400); +assert_eq!(fractional_odds.to_decimal().unwrap(), dec!(1.25)); + +// Passthrough: converting to its own type is a no-op +assert_eq!(american_odds.to_american().unwrap(), -150); + +// --- String Formatting --- +// `to_fractional_str` converts and formats +assert_eq!(american_odds.to_fractional_str().unwrap(), "4/6"); +assert_eq!(decimal_odds.to_fractional_str().unwrap(), "1/4"); + +// `to_decimal_str` converts and formats to 2 decimal places +let fractional_odds_2 = Odds::from((2, 3)); // 1.666... +assert_eq!(fractional_odds_2.to_decimal_str().unwrap(), "1.67"); +assert_eq!(american_odds.to_decimal_str().unwrap(), "1.67"); + +// --- Custom Conversions --- +// Use the `_custom` methods to pass a config +let config = ConversionConfig::default().no_lookup(); + +// Default: -150 (American) -> 4/6 (Fractional) via lookup +assert_eq!(american_odds.to_fractional_str().unwrap(), "4/6"); + +// Custom: -150 (American) -> 2/3 (Fractional) via calculation +assert_eq!(american_odds.to_fractional_str_custom(&config).unwrap(), "2/3"); +``` + +### `ConversionConfig` + +The [`ConversionConfig`] struct allows you to customize conversion behavior, such as: + +* which lookup tables to use, +* how to calculate fractions, +* which rounding strategy to apply. + +You can create a default config or use the builder pattern to customize it. + +```rust +use rust_decimal::RoundingStrategy; +use oddsidizer::{ConversionConfig, FractionStrategy, LookupVariant}; + +// --- Default Configuration --- +// Uses `LookupVariant::Basic` and `FractionStrategy::Simplify` +let config = ConversionConfig::default(); + +assert_eq!(config.lookup_tables_variant, LookupVariant::Basic); +assert_eq!(config.fraction_strategy, FractionStrategy::Simplify); +assert_eq!(config.rounding_strategy, RoundingStrategy::MidpointAwayFromZero); + +// --- Custom Configuration --- + +// Create a config with no lookup tables +let no_lookup_config = ConversionConfig::default().no_lookup(); +assert_eq!(no_lookup_config.lookup_tables_variant, LookupVariant::None); + +// Create a config with extended (less precise) lookup tables +let extended_config = ConversionConfig::default().extended_lookup(); +assert_eq!(extended_config.lookup_tables_variant, LookupVariant::Extended); + +// Create a config that uses plain, unsimplified fractions +let plain_config = ConversionConfig::default().plain_fraction_strategy(); +assert_eq!(plain_config.fraction_strategy, FractionStrategy::Plain); + +// --- Chaining Methods --- +// You can chain methods to build a specific config +let custom_config = ConversionConfig::default() + .extended_lookup() + .plain_fraction_strategy() + .rounding_strategy(RoundingStrategy::RoundDown); + +assert_eq!(custom_config.lookup_tables_variant, LookupVariant::Extended); +assert_eq!(custom_config.fraction_strategy, FractionStrategy::Plain); +assert_eq!(custom_config.rounding_strategy, RoundingStrategy::RoundDown); +``` + +### Core Conversion Functions + +These functions provide direct conversions between different odds formats. They all have a default version and a `_custom` version that accepts a [`ConversionConfig`]. + +```rust +use rust_decimal_macros::dec; +use oddsidizer::{ + american_to_decimal, american_to_fractional, american_to_fractional_custom, + decimal_to_american, decimal_to_fractional, fractional_to_american, + fractional_to_decimal, ConversionConfig, +}; + +// --- American <=> Decimal --- +assert_eq!(american_to_decimal(-110).unwrap(), dec!(1.91)); // From basic lookup +assert_eq!(american_to_decimal(250).unwrap(), dec!(3.5)); +assert_eq!(decimal_to_american(dec!(1.5)).unwrap(), -200); +assert_eq!(decimal_to_american(dec!(3.5)).unwrap(), 250); + +// --- Fractional <=> Decimal --- +assert_eq!(fractional_to_decimal(1, 2).unwrap(), dec!(1.5)); +assert_eq!(fractional_to_decimal(5, 2).unwrap(), dec!(3.5)); +assert_eq!(decimal_to_fractional(dec!(1.5)).unwrap(), (1, 2)); +assert_eq!(decimal_to_fractional(dec!(1.333)).unwrap(), (1, 3)); // Uses Simplify strategy + +// --- American <=> Fractional --- +assert_eq!(american_to_fractional(-200).unwrap(), (1, 2)); +assert_eq!(american_to_fractional(250).unwrap(), (5, 2)); +assert_eq!(fractional_to_american(1, 2).unwrap(), -200); +assert_eq!(fractional_to_american(5, 2).unwrap(), 250); + +// --- Using a Custom Config --- +// The default lookup for -150 gives the common UK fraction 4/6 +assert_eq!(american_to_fractional(-150).unwrap(), (4, 6)); + +// If we disable lookup tables, the function calculates and simplifies the result +let config = ConversionConfig::default().no_lookup(); +assert_eq!(american_to_fractional_custom(-150, &config).unwrap(), (2, 3)); +``` + +### Manual Lookup Functions + +These functions *only* check the lookup tables and return an `Option`. They do not perform any calculations. This is useful if you *only* want to convert values that have a common, predefined fractional representation. + +```rust +use rust_decimal_macros::dec; +use oddsidizer::{ + lookup_american_to_fraction, lookup_decimal_to_fraction, + lookup_decimal_to_fraction_with_config, ConversionConfig, +}; + +// --- Basic Lookup --- + +// Look up a common value that exists in the basic table +let frac = lookup_american_to_fraction(-150); +assert_eq!(frac, Some((4, 6))); + +// Look up a common decimal value +let frac_dec = lookup_decimal_to_fraction(dec!(1.25)); +assert_eq!(frac_dec, Some((1, 4))); + +// --- Handling Misses --- + +// This value doesn't exist in the basic table, so it returns None +let frac_miss = lookup_american_to_fraction(-151); +assert_eq!(frac_miss, None); + +// --- Using Extended Tables --- + +let extended_config = ConversionConfig::default().extended_lookup(); +let dec_val = dec!(1.0013); + +// This value is not in the basic table +assert_eq!(lookup_decimal_to_fraction(dec_val), None); + +// But it IS in the extended table +let frac_extended = lookup_decimal_to_fraction_with_config(dec_val, extended_config); +assert_eq!(frac_extended, Some((1, 750))); +``` + +### `RaceDistance` + +The [`RaceDistance`] struct represents a distance in miles, furlongs, and yards. It can be constructed from a total yardage and implements `Display` for easy formatting. + +```rust +use oddsidizer::RaceDistance; + +// --- Create from total yards --- +let dist_long = RaceDistance::from_yards(2000); + +assert_eq!(dist_long.miles, 1); +assert_eq!(dist_long.furlongs, 1); +assert_eq!(dist_long.yards, 20); + +// --- Display Formatting (via .to_string() or println!) --- +let dist_mile = RaceDistance::from_yards(1760); +let dist_sprint = RaceDistance::from_yards(1320); +let dist_odd = RaceDistance::from_yards(219); +let dist_zero = RaceDistance::from_yards(0); + +// Only non-zero parts are included +assert_eq!(dist_long.to_string(), "1m 1f 20y"); +assert_eq!(dist_mile.to_string(), "1m"); +assert_eq!(dist_sprint.to_string(), "6f"); +assert_eq!(dist_odd.to_string(), "219y"); +assert_eq!(dist_zero.to_string(), "0y"); + +// You can print it directly +println!("The race distance is: {}", dist_long); +// Output: The race distance is: 1m 1f 20y +``` diff --git a/src/Odds Ladder.json b/src/Odds Ladder.json deleted file mode 100644 index 9d48281..0000000 --- a/src/Odds Ladder.json +++ /dev/null @@ -1 +0,0 @@ -"horseracing":{"key":"horseracing","steps":[{"price":{"decimal":1.0010,"fractional":"1/1000"},"enabled":true},{"price":{"decimal":1.0013,"fractional":"1/750"},"enabled":true},{"price":{"decimal":1.0020,"fractional":"1/500"},"enabled":true},{"price":{"decimal":1.0025,"fractional":"1/400"},"enabled":true},{"price":{"decimal":1.0030,"fractional":"1/300"},"enabled":true},{"price":{"decimal":1.0040,"fractional":"1/250"},"enabled":true},{"price":{"decimal":1.0050,"fractional":"1/200"},"enabled":true},{"price":{"decimal":1.0070,"fractional":"1/150"},"enabled":true},{"price":{"decimal":1.0100,"fractional":"1/100"},"enabled":true},{"price":{"decimal":1.0120,"fractional":"1/80"},"enabled":true},{"price":{"decimal":1.0150,"fractional":"1/66"},"enabled":true},{"price":{"decimal":1.0200,"fractional":"1/50"},"enabled":true},{"price":{"decimal":1.0250,"fractional":"1/40"},"enabled":true},{"price":{"decimal":1.0300,"fractional":"1/33"},"enabled":true},{"price":{"decimal":1.0400,"fractional":"1/25"},"enabled":true},{"price":{"decimal":1.0500,"fractional":"1/20"},"enabled":true},{"price":{"decimal":1.0550,"fractional":"1/18"},"enabled":true},{"price":{"decimal":1.0600,"fractional":"1/16"},"enabled":true},{"price":{"decimal":1.0700,"fractional":"1/14"},"enabled":true},{"price":{"decimal":1.0800,"fractional":"1/12"},"enabled":true},{"price":{"decimal":1.0900,"fractional":"1/11"},"enabled":true},{"price":{"decimal":1.1000,"fractional":"1/10"},"enabled":true},{"price":{"decimal":1.1100,"fractional":"1/9"},"enabled":true},{"price":{"decimal":1.1200,"fractional":"1/8"},"enabled":true},{"price":{"decimal":1.1300,"fractional":"2/15"},"enabled":true},{"price":{"decimal":1.1400,"fractional":"1/7"},"enabled":true},{"price":{"decimal":1.1500,"fractional":"2/13"},"enabled":true},{"price":{"decimal":1.1600,"fractional":"1/6"},"enabled":true},{"price":{"decimal":1.1800,"fractional":"2/11"},"enabled":true},{"price":{"decimal":1.1900,"fractional":"19/100"},"enabled":false},{"price":{"decimal":1.2000,"fractional":"1/5"},"enabled":true},{"price":{"decimal":1.2100,"fractional":"21/100"},"enabled":false},{"price":{"decimal":1.2200,"fractional":"2/9"},"enabled":true},{"price":{"decimal":1.2300,"fractional":"23/100"},"enabled":false},{"price":{"decimal":1.2400,"fractional":"6/25"},"enabled":false},{"price":{"decimal":1.2500,"fractional":"1/4"},"enabled":true},{"price":{"decimal":1.2600,"fractional":"13/50"},"enabled":false},{"price":{"decimal":1.2700,"fractional":"27/100"},"enabled":false},{"price":{"decimal":1.2900,"fractional":"2/7"},"enabled":true},{"price":{"decimal":1.3000,"fractional":"3/10"},"enabled":true},{"price":{"decimal":1.3100,"fractional":"31/100"},"enabled":false},{"price":{"decimal":1.3200,"fractional":"8/25"},"enabled":false},{"price":{"decimal":1.3300,"fractional":"1/3"},"enabled":true},{"price":{"decimal":1.3400,"fractional":"17/50"},"enabled":false},{"price":{"decimal":1.3500,"fractional":"7/20"},"enabled":false},{"price":{"decimal":1.3600,"fractional":"4/11"},"enabled":true},{"price":{"decimal":1.3700,"fractional":"37/100"},"enabled":false},{"price":{"decimal":1.3800,"fractional":"19/50"},"enabled":false},{"price":{"decimal":1.3900,"fractional":"39/100"},"enabled":false},{"price":{"decimal":1.4000,"fractional":"2/5"},"enabled":true},{"price":{"decimal":1.4100,"fractional":"41/100"},"enabled":false},{"price":{"decimal":1.4200,"fractional":"21/50"},"enabled":false},{"price":{"decimal":1.4300,"fractional":"43/100"},"enabled":false},{"price":{"decimal":1.4400,"fractional":"4/9"},"enabled":true},{"price":{"decimal":1.4500,"fractional":"9/20"},"enabled":false},{"price":{"decimal":1.4600,"fractional":"23/50"},"enabled":false},{"price":{"decimal":1.4700,"fractional":"40/85"},"enabled":true},{"price":{"decimal":1.4800,"fractional":"12/25"},"enabled":false},{"price":{"decimal":1.4900,"fractional":"49/100"},"enabled":false},{"price":{"decimal":1.5000,"fractional":"1/2"},"enabled":true},{"price":{"decimal":1.5100,"fractional":"51/100"},"enabled":false},{"price":{"decimal":1.5200,"fractional":"13/25"},"enabled":false},{"price":{"decimal":1.5300,"fractional":"8/15"},"enabled":true},{"price":{"decimal":1.5400,"fractional":"27/50"},"enabled":false},{"price":{"decimal":1.5500,"fractional":"11/20"},"enabled":false},{"price":{"decimal":1.5600,"fractional":"14/25"},"enabled":false},{"price":{"decimal":1.5700,"fractional":"4/7"},"enabled":true},{"price":{"decimal":1.5800,"fractional":"29/50"},"enabled":false},{"price":{"decimal":1.5900,"fractional":"59/100"},"enabled":false},{"price":{"decimal":1.6000,"fractional":"3/5"},"enabled":false},{"price":{"decimal":1.6100,"fractional":"8/13"},"enabled":true},{"price":{"decimal":1.6300,"fractional":"63/100"},"enabled":false},{"price":{"decimal":1.6400,"fractional":"16/25"},"enabled":false},{"price":{"decimal":1.6500,"fractional":"13/20"},"enabled":false},{"price":{"decimal":1.6600,"fractional":"4/6"},"enabled":true},{"price":{"decimal":1.6800,"fractional":"34/50"},"enabled":false},{"price":{"decimal":1.6900,"fractional":"69/100"},"enabled":true},{"price":{"decimal":1.7000,"fractional":"7/10"},"enabled":false},{"price":{"decimal":1.7100,"fractional":"71/100"},"enabled":false},{"price":{"decimal":1.7200,"fractional":"8/11"},"enabled":true},{"price":{"decimal":1.7400,"fractional":"37/50"},"enabled":false},{"price":{"decimal":1.7500,"fractional":"3/4"},"enabled":true},{"price":{"decimal":1.7600,"fractional":"19/25"},"enabled":false},{"price":{"decimal":1.7700,"fractional":"77/100"},"enabled":false},{"price":{"decimal":1.7800,"fractional":"39/50"},"enabled":false},{"price":{"decimal":1.7900,"fractional":"79/100"},"enabled":false},{"price":{"decimal":1.8000,"fractional":"4/5"},"enabled":true},{"price":{"decimal":1.8100,"fractional":"81/100"},"enabled":false},{"price":{"decimal":1.8200,"fractional":"41/50"},"enabled":false},{"price":{"decimal":1.8300,"fractional":"5/6"},"enabled":true},{"price":{"decimal":1.8400,"fractional":"21/25"},"enabled":false},{"price":{"decimal":1.8500,"fractional":"17/20"},"enabled":false},{"price":{"decimal":1.8600,"fractional":"20/23"},"enabled":false},{"price":{"decimal":1.8700,"fractional":"87/100"},"enabled":false},{"price":{"decimal":1.8800,"fractional":"22/25"},"enabled":false},{"price":{"decimal":1.8900,"fractional":"89/100"},"enabled":false},{"price":{"decimal":1.9000,"fractional":"9/10"},"enabled":true},{"price":{"decimal":1.9100,"fractional":"10/11"},"enabled":true},{"price":{"decimal":1.9200,"fractional":"23/25"},"enabled":false},{"price":{"decimal":1.9300,"fractional":"93/100"},"enabled":false},{"price":{"decimal":1.9400,"fractional":"47/50"},"enabled":false},{"price":{"decimal":1.9500,"fractional":"20/21"},"enabled":true},{"price":{"decimal":1.9600,"fractional":"24/25"},"enabled":false},{"price":{"decimal":1.9700,"fractional":"97/100"},"enabled":false},{"price":{"decimal":1.9800,"fractional":"49/50"},"enabled":false},{"price":{"decimal":1.9900,"fractional":"99/100"},"enabled":false},{"price":{"decimal":2.0000,"fractional":"1/1"},"enabled":true},{"price":{"decimal":2.0100,"fractional":"101/100"},"enabled":false},{"price":{"decimal":2.0200,"fractional":"51/50"},"enabled":false},{"price":{"decimal":2.0300,"fractional":"103/100"},"enabled":false},{"price":{"decimal":2.0400,"fractional":"26/25"},"enabled":false},{"price":{"decimal":2.0500,"fractional":"21/20"},"enabled":true},{"price":{"decimal":2.0600,"fractional":"53/50"},"enabled":false},{"price":{"decimal":2.0700,"fractional":"107/100"},"enabled":false},{"price":{"decimal":2.0800,"fractional":"27/25"},"enabled":false},{"price":{"decimal":2.0900,"fractional":"109/100"},"enabled":false},{"price":{"decimal":2.1000,"fractional":"11/10"},"enabled":true},{"price":{"decimal":2.1100,"fractional":"111/100"},"enabled":false},{"price":{"decimal":2.1200,"fractional":"28/25"},"enabled":false},{"price":{"decimal":2.1300,"fractional":"113/100"},"enabled":false},{"price":{"decimal":2.1400,"fractional":"57/50"},"enabled":false},{"price":{"decimal":2.1500,"fractional":"23/20"},"enabled":true},{"price":{"decimal":2.1600,"fractional":"29/25"},"enabled":false},{"price":{"decimal":2.1700,"fractional":"117/100"},"enabled":false},{"price":{"decimal":2.1800,"fractional":"59/50"},"enabled":false},{"price":{"decimal":2.1900,"fractional":"119/100"},"enabled":false},{"price":{"decimal":2.2000,"fractional":"6/5"},"enabled":true},{"price":{"decimal":2.2100,"fractional":"121/100"},"enabled":false},{"price":{"decimal":2.2200,"fractional":"61/50"},"enabled":false},{"price":{"decimal":2.2300,"fractional":"123/100"},"enabled":false},{"price":{"decimal":2.2400,"fractional":"31/25"},"enabled":false},{"price":{"decimal":2.2500,"fractional":"5/4"},"enabled":true},{"price":{"decimal":2.2600,"fractional":"63/50"},"enabled":false},{"price":{"decimal":2.2700,"fractional":"127/100"},"enabled":false},{"price":{"decimal":2.2800,"fractional":"32/25"},"enabled":false},{"price":{"decimal":2.3000,"fractional":"13/10"},"enabled":true},{"price":{"decimal":2.3200,"fractional":"33/25"},"enabled":false},{"price":{"decimal":2.3400,"fractional":"67/50"},"enabled":false},{"price":{"decimal":2.3500,"fractional":"27/20"},"enabled":false},{"price":{"decimal":2.3600,"fractional":"34/25"},"enabled":false},{"price":{"decimal":2.3700,"fractional":"11/8"},"enabled":true},{"price":{"decimal":2.4000,"fractional":"7/5"},"enabled":true},{"price":{"decimal":2.4200,"fractional":"71/50"},"enabled":false},{"price":{"decimal":2.4400,"fractional":"36/25"},"enabled":false},{"price":{"decimal":2.4500,"fractional":"29/20"},"enabled":true},{"price":{"decimal":2.4600,"fractional":"73/50"},"enabled":false},{"price":{"decimal":2.4800,"fractional":"37/25"},"enabled":false},{"price":{"decimal":2.5000,"fractional":"6/4"},"enabled":true},{"price":{"decimal":2.5200,"fractional":"38/25"},"enabled":false},{"price":{"decimal":2.5400,"fractional":"77/50"},"enabled":false},{"price":{"decimal":2.5600,"fractional":"39/25"},"enabled":false},{"price":{"decimal":2.5800,"fractional":"79/50"},"enabled":false},{"price":{"decimal":2.6000,"fractional":"8/5"},"enabled":true},{"price":{"decimal":2.6200,"fractional":"13/8"},"enabled":true},{"price":{"decimal":2.6400,"fractional":"41/25"},"enabled":false},{"price":{"decimal":2.6600,"fractional":"83/50"},"enabled":false},{"price":{"decimal":2.6800,"fractional":"42/25"},"enabled":false},{"price":{"decimal":2.7000,"fractional":"17/10"},"enabled":true},{"price":{"decimal":2.7200,"fractional":"43/25"},"enabled":false},{"price":{"decimal":2.7400,"fractional":"87/50"},"enabled":false},{"price":{"decimal":2.7500,"fractional":"7/4"},"enabled":true},{"price":{"decimal":2.7600,"fractional":"44/25"},"enabled":false},{"price":{"decimal":2.7800,"fractional":"89/50"},"enabled":false},{"price":{"decimal":2.8000,"fractional":"9/5"},"enabled":true},{"price":{"decimal":2.8200,"fractional":"91/50"},"enabled":false},{"price":{"decimal":2.8400,"fractional":"46/25"},"enabled":false},{"price":{"decimal":2.8600,"fractional":"93/50"},"enabled":false},{"price":{"decimal":2.8700,"fractional":"15/8"},"enabled":false},{"price":{"decimal":2.8800,"fractional":"15/8"},"enabled":false},{"price":{"decimal":2.9000,"fractional":"19/10"},"enabled":true},{"price":{"decimal":2.9200,"fractional":"48/25"},"enabled":false},{"price":{"decimal":2.9400,"fractional":"97/50"},"enabled":true},{"price":{"decimal":2.9600,"fractional":"49/25"},"enabled":false},{"price":{"decimal":2.9800,"fractional":"99/50"},"enabled":false},{"price":{"decimal":3.0000,"fractional":"2/1"},"enabled":true},{"price":{"decimal":3.0500,"fractional":"41/20"},"enabled":false},{"price":{"decimal":3.1000,"fractional":"21/10"},"enabled":true},{"price":{"decimal":3.1250,"fractional":"85/40"},"enabled":true},{"price":{"decimal":3.1500,"fractional":"43/20"},"enabled":false},{"price":{"decimal":3.2000,"fractional":"11/5"},"enabled":true},{"price":{"decimal":3.2500,"fractional":"9/4"},"enabled":true},{"price":{"decimal":3.3000,"fractional":"23/10"},"enabled":true},{"price":{"decimal":3.3500,"fractional":"47/20"},"enabled":false},{"price":{"decimal":3.4000,"fractional":"12/5"},"enabled":true},{"price":{"decimal":3.4500,"fractional":"49/20"},"enabled":false},{"price":{"decimal":3.5000,"fractional":"5/2"},"enabled":true},{"price":{"decimal":3.5500,"fractional":"51/20"},"enabled":false},{"price":{"decimal":3.6000,"fractional":"13/5"},"enabled":true},{"price":{"decimal":3.6500,"fractional":"53/20"},"enabled":false},{"price":{"decimal":3.7000,"fractional":"27/10"},"enabled":false},{"price":{"decimal":3.7500,"fractional":"11/4"},"enabled":true},{"price":{"decimal":3.8000,"fractional":"14/5"},"enabled":true},{"price":{"decimal":3.8500,"fractional":"57/20"},"enabled":false},{"price":{"decimal":3.9500,"fractional":"59/20"},"enabled":false},{"price":{"decimal":4.0000,"fractional":"3/1"},"enabled":true},{"price":{"decimal":4.0500,"fractional":"61/20"},"enabled":false},{"price":{"decimal":4.1000,"fractional":"31/10"},"enabled":true},{"price":{"decimal":4.1500,"fractional":"63/20"},"enabled":false},{"price":{"decimal":4.2000,"fractional":"16/5"},"enabled":true},{"price":{"decimal":4.2500,"fractional":"13/4"},"enabled":false},{"price":{"decimal":4.3000,"fractional":"33/10"},"enabled":false},{"price":{"decimal":4.3300,"fractional":"10/3"},"enabled":true},{"price":{"decimal":4.3500,"fractional":"67/20"},"enabled":false},{"price":{"decimal":4.4000,"fractional":"17/5"},"enabled":true},{"price":{"decimal":4.4500,"fractional":"69/20"},"enabled":false},{"price":{"decimal":4.5000,"fractional":"7/2"},"enabled":true},{"price":{"decimal":4.5500,"fractional":"71/20"},"enabled":false},{"price":{"decimal":4.6000,"fractional":"18/5"},"enabled":true},{"price":{"decimal":4.6500,"fractional":"73/20"},"enabled":false},{"price":{"decimal":4.7000,"fractional":"37/10"},"enabled":false},{"price":{"decimal":4.7500,"fractional":"15/4"},"enabled":true},{"price":{"decimal":4.8000,"fractional":"19/5"},"enabled":true},{"price":{"decimal":4.8500,"fractional":"77/20"},"enabled":false},{"price":{"decimal":4.9000,"fractional":"39/10"},"enabled":false},{"price":{"decimal":4.9500,"fractional":"79/20"},"enabled":false},{"price":{"decimal":5.0000,"fractional":"4/1"},"enabled":true},{"price":{"decimal":5.1000,"fractional":"41/10"},"enabled":false},{"price":{"decimal":5.2000,"fractional":"21/5"},"enabled":false},{"price":{"decimal":5.3000,"fractional":"43/10"},"enabled":false},{"price":{"decimal":5.4000,"fractional":"22/5"},"enabled":false},{"price":{"decimal":5.5000,"fractional":"9/2"},"enabled":true},{"price":{"decimal":5.6000,"fractional":"23/5"},"enabled":false},{"price":{"decimal":5.7000,"fractional":"47/10"},"enabled":false},{"price":{"decimal":5.8000,"fractional":"24/5"},"enabled":false},{"price":{"decimal":5.9000,"fractional":"49/10"},"enabled":false},{"price":{"decimal":6.0000,"fractional":"5/1"},"enabled":true},{"price":{"decimal":6.2000,"fractional":"26/5"},"enabled":false},{"price":{"decimal":6.4000,"fractional":"27/5"},"enabled":false},{"price":{"decimal":6.5000,"fractional":"11/2"},"enabled":true},{"price":{"decimal":6.6000,"fractional":"28/5"},"enabled":false},{"price":{"decimal":6.8000,"fractional":"29/5"},"enabled":false},{"price":{"decimal":7.0000,"fractional":"6/1"},"enabled":true},{"price":{"decimal":7.2000,"fractional":"31/5"},"enabled":false},{"price":{"decimal":7.4000,"fractional":"32/5"},"enabled":false},{"price":{"decimal":7.5000,"fractional":"13/2"},"enabled":true},{"price":{"decimal":7.6000,"fractional":"33/5"},"enabled":false},{"price":{"decimal":7.8000,"fractional":"34/5"},"enabled":false},{"price":{"decimal":8.0000,"fractional":"7/1"},"enabled":true},{"price":{"decimal":8.2000,"fractional":"36/5"},"enabled":false},{"price":{"decimal":8.4000,"fractional":"37/5"},"enabled":false},{"price":{"decimal":8.5000,"fractional":"15/2"},"enabled":true},{"price":{"decimal":8.6000,"fractional":"38/5"},"enabled":false},{"price":{"decimal":8.8000,"fractional":"39/5"},"enabled":false},{"price":{"decimal":9.0000,"fractional":"8/1"},"enabled":true},{"price":{"decimal":9.2000,"fractional":"41/5"},"enabled":false},{"price":{"decimal":9.4000,"fractional":"42/5"},"enabled":false},{"price":{"decimal":9.5000,"fractional":"17/2"},"enabled":true},{"price":{"decimal":9.6000,"fractional":"43/5"},"enabled":false},{"price":{"decimal":9.8000,"fractional":"44/5"},"enabled":false},{"price":{"decimal":10.0000,"fractional":"9/1"},"enabled":true},{"price":{"decimal":11.0000,"fractional":"10/1"},"enabled":true},{"price":{"decimal":12.0000,"fractional":"11/1"},"enabled":true},{"price":{"decimal":13.0000,"fractional":"12/1"},"enabled":true},{"price":{"decimal":14.0000,"fractional":"13/1"},"enabled":true},{"price":{"decimal":15.0000,"fractional":"14/1"},"enabled":true},{"price":{"decimal":16.0000,"fractional":"15/1"},"enabled":true},{"price":{"decimal":17.0000,"fractional":"16/1"},"enabled":true},{"price":{"decimal":19.0000,"fractional":"18/1"},"enabled":true},{"price":{"decimal":21.0000,"fractional":"20/1"},"enabled":true},{"price":{"decimal":23.0000,"fractional":"22/1"},"enabled":true},{"price":{"decimal":26.0000,"fractional":"25/1"},"enabled":true},{"price":{"decimal":29.0000,"fractional":"28/1"},"enabled":true},{"price":{"decimal":31.0000,"fractional":"30/1"},"enabled":true},{"price":{"decimal":34.0000,"fractional":"33/1"},"enabled":true},{"price":{"decimal":36.0000,"fractional":"35/1"},"enabled":true},{"price":{"decimal":41.0000,"fractional":"40/1"},"enabled":true},{"price":{"decimal":46.0000,"fractional":"45/1"},"enabled":true},{"price":{"decimal":51.0000,"fractional":"50/1"},"enabled":true},{"price":{"decimal":56.0000,"fractional":"55/1"},"enabled":true},{"price":{"decimal":61.0000,"fractional":"60/1"},"enabled":true},{"price":{"decimal":67.0000,"fractional":"66/1"},"enabled":true},{"price":{"decimal":71.0000,"fractional":"70/1"},"enabled":true},{"price":{"decimal":76.0000,"fractional":"75/1"},"enabled":false},{"price":{"decimal":81.0000,"fractional":"80/1"},"enabled":true},{"price":{"decimal":86.0000,"fractional":"85/1"},"enabled":false},{"price":{"decimal":91.0000,"fractional":"90/1"},"enabled":true},{"price":{"decimal":96.0000,"fractional":"95/1"},"enabled":false},{"price":{"decimal":101.0000,"fractional":"100/1"},"enabled":true},{"price":{"decimal":111.0000,"fractional":"110/1"},"enabled":true},{"price":{"decimal":121.0000,"fractional":"120/1"},"enabled":true},{"price":{"decimal":126.0000,"fractional":"125/1"},"enabled":true},{"price":{"decimal":131.0000,"fractional":"130/1"},"enabled":true},{"price":{"decimal":141.0000,"fractional":"140/1"},"enabled":true},{"price":{"decimal":151.0000,"fractional":"150/1"},"enabled":true},{"price":{"decimal":176.0000,"fractional":"175/1"},"enabled":true},{"price":{"decimal":201.0000,"fractional":"200/1"},"enabled":true},{"price":{"decimal":226.0000,"fractional":"225/1"},"enabled":true},{"price":{"decimal":251.0000,"fractional":"250/1"},"enabled":true},{"price":{"decimal":276.0000,"fractional":"275/1"},"enabled":true},{"price":{"decimal":301.0000,"fractional":"300/1"},"enabled":true},{"price":{"decimal":401.0000,"fractional":"400/1"},"enabled":true},{"price":{"decimal":501.0000,"fractional":"500/1"},"enabled":true},{"price":{"decimal":1001.0000,"fractional":"1000/1"},"enabled":true}],"matchStrategy":"floor"}, \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index dd65630..349bb8f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,5 @@ +#![doc = pretty_readme::docify!("README.md", "https://docs.rs/oddsidizer/latest/oddsidizer/", "./")] + mod config; pub use config::*;