steam_client/services/
trading.rs1use steamid::SteamID;
8
9use crate::{error::SteamError, SteamClient};
10
11#[derive(Debug, Clone, Default)]
13pub struct TradeRestrictions {
14 pub steamguard_required_days: u32,
16 pub new_device_cooldown_days: u32,
18 pub default_password_reset_probation_days: u32,
20 pub password_reset_probation_days: u32,
22 pub default_email_change_probation_days: u32,
24 pub email_change_probation_days: u32,
26}
27
28impl SteamClient {
29 pub async fn trade(&mut self, steam_id: SteamID) -> Result<(), SteamError> {
37 if !self.is_logged_in() {
38 return Err(SteamError::NotLoggedOn);
39 }
40
41 let msg = steam_protos::CMsgTradingInitiateTradeRequest { other_steamid: Some(steam_id.steam_id64()), ..Default::default() };
42
43 self.send_message(steam_enums::EMsg::EconTrading_InitiateTradeRequest, &msg).await
44 }
45
46 pub async fn cancel_trade_request(&mut self, steam_id: SteamID) -> Result<(), SteamError> {
51 if !self.is_logged_in() {
52 return Err(SteamError::NotLoggedOn);
53 }
54
55 let msg = steam_protos::CMsgTradingCancelTradeRequest { other_steamid: Some(steam_id.steam_id64()) };
56
57 self.send_message(steam_enums::EMsg::EconTrading_CancelTradeRequest, &msg).await
58 }
59
60 pub async fn respond_to_trade(&mut self, trade_request_id: u32, accept: bool) -> Result<(), SteamError> {
66 if !self.is_logged_in() {
67 return Err(SteamError::NotLoggedOn);
68 }
69
70 let response = if accept { steam_enums::EEconTradeResponse::Accepted } else { steam_enums::EEconTradeResponse::Declined };
71
72 let msg = steam_protos::CMsgTradingInitiateTradeResponse { trade_request_id: Some(trade_request_id), response: Some(response as u32), ..Default::default() };
73
74 self.send_message(steam_enums::EMsg::EconTrading_InitiateTradeResponse, &msg).await
75 }
76}