Six4Win.WebApi

<back to all web services

GetDrawDignostics

The following routes are available for this service:
All Verbs/qry/rounds/draw/diagnostics
#![allow(
    dead_code,
    non_camel_case_types,
    non_snake_case,
    clippy::upper_case_acronyms
)]

use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct Initialization {
    #[serde(rename = "dataLoadDuration")]
    pub data_load_duration: i64,
    #[serde(rename = "betsCollectionsCreationDuration")]
    pub bets_collections_creation_duration: i64,
    #[serde(rename = "combinationsOccuranceLookupInitializationDuration")]
    pub combinations_occurance_lookup_initialization_duration: i64,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct SequenceGeneration {
    #[serde(rename = "nrOfThreads")]
    pub nr_of_threads: i32,
    #[serde(rename = "nrOfResultsProbed")]
    pub nr_of_results_probed: i32,
    pub duration: i64,
    #[serde(rename = "avgSinglePassDuration")]
    pub avg_single_pass_duration: i64,
}

#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(i32)]
pub enum SortingOrder {
    #[default]
    None = 0,
    Ascending = 1,
    Descending = 2,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct BestFitFinder {
    #[serde(rename = "targetAmount")]
    pub target_amount: f64,
    #[serde(rename = "awardedAmount")]
    pub awarded_amount: f64,
    pub deviation: f64,
    #[serde(rename = "deviationPct")]
    pub deviation_pct: f64,
    #[serde(rename = "sequenceResultType")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sequence_result_type: Option<String>,
    #[serde(rename = "isJackPot5Drawn")]
    pub is_jack_pot5_drawn: bool,
    #[serde(rename = "filteringPeriod")]
    pub filtering_period: i64,
    #[serde(rename = "winCountOrder")]
    pub win_count_order: SortingOrder,
    #[serde(rename = "minAmount")]
    pub min_amount: f64,
    #[serde(rename = "maxAmount")]
    pub max_amount: f64,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct Bet {
    #[serde(rename = "isFound")]
    pub is_found: bool,
    #[serde(rename = "betId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bet_id: Option<String>,
    #[serde(rename = "slipId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slip_id: Option<String>,
    #[serde(rename = "combStake")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub comb_stake: Option<Value>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct QualifiedPool {
    pub id: i32,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    pub coefficient: f64,
    #[serde(rename = "availableAmount")]
    pub available_amount: f64,
    #[serde(rename = "awardedAmount")]
    pub awarded_amount: f64,
    #[serde(rename = "targetBet")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub target_bet: Option<Bet>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct Purger {
    #[serde(rename = "prevalentStake")]
    pub prevalent_stake: f64,
    #[serde(rename = "poolPurger")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub pool_purger: Option<String>,
    #[serde(rename = "qualifiedPools")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub qualified_pools: Option<Vec<QualifiedPool>>,
}

#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(i32)]
pub enum ResponseStatus {
    #[default]
    Failure = 0,
    Success = 1,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct StimulationResponse {
    #[serde(rename = "stimulationId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stimulation_id: Option<String>,
    pub status: ResponseStatus,
    #[serde(rename = "failureReason")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub failure_reason: Option<String>,
    #[serde(rename = "slipId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slip_id: Option<String>,
    #[serde(rename = "betId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bet_id: Option<String>,
    #[serde(rename = "amountAwarded")]
    pub amount_awarded: f64,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct CurrentRoundInfo {
    #[serde(rename = "roundId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub round_id: Option<String>,
    pub amount: f64,
    #[serde(rename = "inertCode")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub inert_code: Option<String>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct BettingApp {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub version: Option<String>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct Ref {
    pub id: String,
    pub val: String,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct RefEx {
    #[serde(flatten)]
    pub r#ref: Ref,
    pub data: RecordDictionary,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct Origin {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub application: Option<BettingApp>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ip: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub organization: Option<RefEx>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub region: Option<Ref>,
    #[serde(rename = "locationGroup")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub location_group: Option<Ref>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub location: Option<RefEx>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub device: Option<RefEx>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub clerk: Option<Ref>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct WinnerByCode {
    #[serde(rename = "roundId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub round_id: Option<String>,
    #[serde(rename = "drawnAtUtc")]
    pub drawn_at_utc: String,
    #[serde(rename = "slipId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub slip_id: Option<String>,
    #[serde(rename = "betId")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bet_id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub code: Option<String>,
    pub amount: f64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub origin: Option<Origin>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bettor: Option<Ref>,
    #[serde(rename = "locationAddressOrBettorInfo")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub location_address_or_bettor_info: Option<String>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct LocalCodePotInfo {
    #[serde(rename = "isActive")]
    pub is_active: bool,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub current: Option<CurrentRoundInfo>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub winners: Option<Vec<WinnerByCode>>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct SuperWinInfo {
    #[serde(rename = "durationInMs")]
    pub duration_in_ms: i64,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reasoning: Option<String>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct HappyHourInfo {
    #[serde(rename = "isHappyHour")]
    pub is_happy_hour: bool,
    #[serde(rename = "oddsModifier")]
    pub odds_modifier: f64,
    #[serde(rename = "roundPoolBonusPct")]
    pub round_pool_bonus_pct: f64,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct AccumulatorConfiguration {
    #[serde(flatten)]
    pub accumulator_configuration: AccumulatorConfiguration,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(rename = "updatedAt")]
    pub updated_at: String,
}

#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(i32)]
pub enum SyphonType {
    #[default]
    Location = 0,
    Bettor = 1,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct Syphon {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    pub r#type: SyphonType,
    #[serde(rename = "nrOfCombinations")]
    pub nr_of_combinations: i32,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct SyphonInfo {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bettors: Option<HashMap<String, Syphon>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub locations: Option<HashMap<String, Syphon>>,
    #[serde(rename = "hasSyphons")]
    pub has_syphons: bool,
    #[serde(rename = "totalSyphonsInRound")]
    pub total_syphons_in_round: i32,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct DrawDiagnostics {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(rename = "initializationInfo")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub initialization_info: Option<Initialization>,
    #[serde(rename = "sequenceGenerationInfo")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sequence_generation_info: Option<SequenceGeneration>,
    #[serde(rename = "bestFitFinderInfo")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub best_fit_finder_info: Option<BestFitFinder>,
    #[serde(rename = "purgerInfo")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub purger_info: Option<Purger>,
    pub duration: i64,
    #[serde(rename = "stimulationResponses")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub stimulation_responses: Option<Vec<StimulationResponse>>,
    #[serde(rename = "localCodePot")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub local_code_pot: Option<LocalCodePotInfo>,
    #[serde(rename = "superWin")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub super_win: Option<SuperWinInfo>,
    #[serde(rename = "happyHour")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub happy_hour: Option<HappyHourInfo>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub reasoning: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub configuration: Option<AccumulatorConfiguration>,
    #[serde(rename = "syphonInfo")]
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub syphon_info: Option<SyphonInfo>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct GetDrawDignostics {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default)]
#[serde(default)]
pub struct RecordDictionary(pub HashMap<TKey, TVal>);

Rust GetDrawDignostics DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /qry/rounds/draw/diagnostics HTTP/1.1 
Host: s4w2.api.bettor.webhop.biz 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<GetDrawDignostics xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Six4Win.WebApi.ServiceModel">
  <Id>String</Id>
</GetDrawDignostics>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<DrawDiagnostics xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Six4Win.ReadModel">
  <BestFitFinderInfo>
    <AwardedAmount>0</AwardedAmount>
    <Deviation>0</Deviation>
    <DeviationPct>0</DeviationPct>
    <FilteringPeriod>0</FilteringPeriod>
    <IsJackPot5Drawn>false</IsJackPot5Drawn>
    <MaxAmount>0</MaxAmount>
    <MinAmount>0</MinAmount>
    <SequenceResultType>String</SequenceResultType>
    <TargetAmount>0</TargetAmount>
    <WinCountOrder>None</WinCountOrder>
  </BestFitFinderInfo>
  <Configuration xmlns:d2p1="http://schemas.datacontract.org/2004/07/Six4Win">
    <d2p1:AntiSyphonProtectionOverride>false</d2p1:AntiSyphonProtectionOverride>
    <d2p1:DebugConfig>
      <d2p1:LogBettorStats>false</d2p1:LogBettorStats>
      <d2p1:LogLocationStats>false</d2p1:LogLocationStats>
    </d2p1:DebugConfig>
    <d2p1:DeviationCategorySpanInPct>0</d2p1:DeviationCategorySpanInPct>
    <d2p1:DeviationCategoryThresholdAmount>0</d2p1:DeviationCategoryThresholdAmount>
    <d2p1:FraudDetectionConfig>
      <d2p1:AntiSyphon>
        <d2p1:Blacklists>
          <d2p1:Locations xmlns:d6p1="http://schemas.datacontract.org/2004/07/Starnet.Common">
            <d6p1:Ref>
              <d6p1:_x003C_Id_x003E_k__BackingField>String</d6p1:_x003C_Id_x003E_k__BackingField>
              <d6p1:_x003C_Val_x003E_k__BackingField>String</d6p1:_x003C_Val_x003E_k__BackingField>
            </d6p1:Ref>
          </d2p1:Locations>
          <d2p1:Players xmlns:d6p1="http://schemas.datacontract.org/2004/07/Starnet.Common">
            <d6p1:Ref>
              <d6p1:_x003C_Id_x003E_k__BackingField>String</d6p1:_x003C_Id_x003E_k__BackingField>
              <d6p1:_x003C_Val_x003E_k__BackingField>String</d6p1:_x003C_Val_x003E_k__BackingField>
            </d6p1:Ref>
          </d2p1:Players>
        </d2p1:Blacklists>
        <d2p1:CombinationCountPerRoundThresholdPct>0</d2p1:CombinationCountPerRoundThresholdPct>
        <d2p1:ExcludedLocations xmlns:d5p1="http://schemas.datacontract.org/2004/07/Starnet.Common">
          <d5p1:Ref>
            <d5p1:_x003C_Id_x003E_k__BackingField>String</d5p1:_x003C_Id_x003E_k__BackingField>
            <d5p1:_x003C_Val_x003E_k__BackingField>String</d5p1:_x003C_Val_x003E_k__BackingField>
          </d5p1:Ref>
        </d2p1:ExcludedLocations>
        <d2p1:IncludeRoundPctAsBettorSyphonCriteria>false</d2p1:IncludeRoundPctAsBettorSyphonCriteria>
        <d2p1:IsActive>false</d2p1:IsActive>
      </d2p1:AntiSyphon>
    </d2p1:FraudDetectionConfig>
    <d2p1:HighRollerSettings>
      <d2p1:CategoryThresholds>
        <d2p1:HighRollerSettings.CategoryThreshold>
          <d2p1:Category>Pickerel</d2p1:Category>
          <d2p1:Threshold>0</d2p1:Threshold>
        </d2p1:HighRollerSettings.CategoryThreshold>
      </d2p1:CategoryThresholds>
      <d2p1:Pools>
        <d2p1:HighRollerSettings.PoolSettings>
          <d2p1:Caps>
            <d2p1:MaxAmountInPrevalentStakes>0</d2p1:MaxAmountInPrevalentStakes>
            <d2p1:MinusCoef>0</d2p1:MinusCoef>
            <d2p1:PlusCoef>0</d2p1:PlusCoef>
          </d2p1:Caps>
          <d2p1:ContributionToRoundPoolPct>0</d2p1:ContributionToRoundPoolPct>
          <d2p1:Id>0</d2p1:Id>
          <d2p1:IsActive>false</d2p1:IsActive>
          <d2p1:Name>String</d2p1:Name>
        </d2p1:HighRollerSettings.PoolSettings>
      </d2p1:Pools>
    </d2p1:HighRollerSettings>
    <d2p1:JP5WinnerCooldownPolicy>
      <d2p1:CooldownIntervalInDays>0</d2p1:CooldownIntervalInDays>
      <d2p1:IsActive>false</d2p1:IsActive>
    </d2p1:JP5WinnerCooldownPolicy>
    <d2p1:JackPot5ThresholdInterval>
      <d2p1:End>0</d2p1:End>
      <d2p1:Start>0</d2p1:Start>
    </d2p1:JackPot5ThresholdInterval>
    <d2p1:LocationOptimizationLevel>None</d2p1:LocationOptimizationLevel>
    <d2p1:LowWinCountAffinityInPct>0</d2p1:LowWinCountAffinityInPct>
    <d2p1:OverflowCoefficientPoolsToRound>false</d2p1:OverflowCoefficientPoolsToRound>
    <d2p1:Pools>
      <d2p1:AccumulatorConfiguration.Pool>
        <d2p1:Id>0</d2p1:Id>
        <d2p1:Name>String</d2p1:Name>
        <d2p1:RTP>0</d2p1:RTP>
        <d2p1:ReserveRTP>0</d2p1:ReserveRTP>
      </d2p1:AccumulatorConfiguration.Pool>
    </d2p1:Pools>
    <d2p1:PrevalentStake>0</d2p1:PrevalentStake>
    <d2p1:PurgeThresholdModifier>0</d2p1:PurgeThresholdModifier>
    <d2p1:RoundPoolCircuitBreakerThreshold>0</d2p1:RoundPoolCircuitBreakerThreshold>
    <d2p1:WinCountOrderAffinity>
      <d2p1:WinCountOrderProbability>
        <d2p1:Order>None</d2p1:Order>
        <d2p1:Probability>0</d2p1:Probability>
      </d2p1:WinCountOrderProbability>
    </d2p1:WinCountOrderAffinity>
  </Configuration>
  <Duration>0</Duration>
  <HappyHour>
    <IsHappyHour>false</IsHappyHour>
    <OddsModifier>0</OddsModifier>
    <RoundPoolBonusPct>0</RoundPoolBonusPct>
  </HappyHour>
  <Id>String</Id>
  <InitializationInfo>
    <BetsCollectionsCreationDuration>0</BetsCollectionsCreationDuration>
    <CombinationsOccuranceLookupInitializationDuration>0</CombinationsOccuranceLookupInitializationDuration>
    <DataLoadDuration>0</DataLoadDuration>
  </InitializationInfo>
  <LocalCodePot>
    <DurationInMs>0</DurationInMs>
  </LocalCodePot>
  <PurgerInfo>
    <PoolPurger>String</PoolPurger>
    <PrevalentStake>0</PrevalentStake>
    <QualifiedPools>
      <DrawDiagnostics.QualifiedPool>
        <AvailableAmount>0</AvailableAmount>
        <AwardedAmount>0</AwardedAmount>
        <Coefficient>0</Coefficient>
        <Id>0</Id>
        <Name>String</Name>
        <TargetBet>
          <BetId>String</BetId>
          <CombStake />
          <IsFound>false</IsFound>
          <SlipId>String</SlipId>
        </TargetBet>
      </DrawDiagnostics.QualifiedPool>
    </QualifiedPools>
  </PurgerInfo>
  <Reasoning>String</Reasoning>
  <SequenceGenerationInfo>
    <AvgSinglePassDuration>0</AvgSinglePassDuration>
    <Duration>0</Duration>
    <NrOfResultsProbed>0</NrOfResultsProbed>
    <NrOfThreads>0</NrOfThreads>
  </SequenceGenerationInfo>
  <StimulationResponses>
    <DrawDiagnostics.StimulationResponse>
      <AmountAwarded>0</AmountAwarded>
      <BetId>String</BetId>
      <FailureReason>String</FailureReason>
      <SlipId>String</SlipId>
      <Status>Failure</Status>
      <StimulationId>String</StimulationId>
    </DrawDiagnostics.StimulationResponse>
  </StimulationResponses>
  <SuperWin>
    <DurationInMs>0</DurationInMs>
    <Reasoning>String</Reasoning>
  </SuperWin>
  <SyphonInfo xmlns:d2p1="http://schemas.datacontract.org/2004/07/Six4Win.Common">
    <d2p1:Bettors xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:KeyValueOfstringSyphonFQuwRXs4>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value>
          <d2p1:Id>String</d2p1:Id>
          <d2p1:Name>String</d2p1:Name>
          <d2p1:NrOfCombinations>0</d2p1:NrOfCombinations>
          <d2p1:Type>Location</d2p1:Type>
        </d3p1:Value>
      </d3p1:KeyValueOfstringSyphonFQuwRXs4>
    </d2p1:Bettors>
    <d2p1:Locations xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:KeyValueOfstringSyphonFQuwRXs4>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value>
          <d2p1:Id>String</d2p1:Id>
          <d2p1:Name>String</d2p1:Name>
          <d2p1:NrOfCombinations>0</d2p1:NrOfCombinations>
          <d2p1:Type>Location</d2p1:Type>
        </d3p1:Value>
      </d3p1:KeyValueOfstringSyphonFQuwRXs4>
    </d2p1:Locations>
  </SyphonInfo>
</DrawDiagnostics>