Closed foonsun closed 4 years ago
My project is here: https://github.com/foonsun/huobi_future_async
Enum Example:https://github.com/foonsun/binance-async-rs/blob/master/src/error.rs#L27
JSON Example:https://github.com/foonsun/binance-async-rs/blob/master/src/transport.rs#L209
I use the projects above to wirte my codes on huobi. The API address is https://api.hbdm.vn/api/v1/contract_contract_info.
The data return is Json formated.
I have tried to fix it for one week.But still I don't know the reason failed.
Pls help me.
Below is my code.My code is copied from https://github.com/foonsun/binance-async-rs/.
#[derive(Deserialize, Serialize, Debug, Clone)] pub struct HuobiErrorData { pub code: i64, pub msg: String, } #[derive(Deserialize, Serialize, Debug, Clone)] #[serde(untagged)] pub enum HuobiResponse<T> { Success(T), Error(HuobiErrorData), } impl<T: for<'a> Deserialize<'a>> HuobiResponse<T> { pub fn into_result(self) -> Result<T, Error> { match self { Self::Success(t) => Result::Ok(t), Self::Error(HuobiErrorData { code, msg }) => { Result::Err(Error::HuobiError { code, msg }) } } } }
The origin response of the api is below.
{"status":"ok","data":[{"symbol":"BTC","contract_code":"BTC200703","contract_type":"this_week","contract_size":100.000000000000000000,"price_tick":0.010000000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"BTC","contract_code":"BTC200710","contract_type":"next_week","contract_size":100.000000000000000000,"price_tick":0.010000000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"BTC","contract_code":"BTC200925","contract_type":"quarter","contract_size":100.000000000000000000,"price_tick":0.010000000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"BTC","contract_code":"BTC201225","contract_type":"next_quarter","contract_size":100.000000000000000000,"price_tick":0.010000000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1},{"symbol":"ETH","contract_code":"ETH200703","contract_type":"this_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"ETH","contract_code":"ETH200710","contract_type":"next_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"ETH","contract_code":"ETH200925","contract_type":"quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"ETH","contract_code":"ETH201225","contract_type":"next_quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1},{"symbol":"EOS","contract_code":"EOS200703","contract_type":"this_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"EOS","contract_code":"EOS200710","contract_type":"next_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"EOS","contract_code":"EOS200925","contract_type":"quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"EOS","contract_code":"EOS201225","contract_type":"next_quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1},{"symbol":"BCH","contract_code":"BCH200703","contract_type":"this_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"BCH","contract_code":"BCH200710","contract_type":"next_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"BCH","contract_code":"BCH200925","contract_type":"quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"BCH","contract_code":"BCH201225","contract_type":"next_quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1},{"symbol":"BSV","contract_code":"BSV200703","contract_type":"this_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"BSV","contract_code":"BSV200710","contract_type":"next_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"BSV","contract_code":"BSV200925","contract_type":"quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"BSV","contract_code":"BSV201225","contract_type":"next_quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1},{"symbol":"LTC","contract_code":"LTC200703","contract_type":"this_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"LTC","contract_code":"LTC200710","contract_type":"next_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"LTC","contract_code":"LTC200925","contract_type":"quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"LTC","contract_code":"LTC201225","contract_type":"next_quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1},{"symbol":"XRP","contract_code":"XRP200703","contract_type":"this_week","contract_size":10.000000000000000000,"price_tick":0.000100000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"XRP","contract_code":"XRP200710","contract_type":"next_week","contract_size":10.000000000000000000,"price_tick":0.000100000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"XRP","contract_code":"XRP200925","contract_type":"quarter","contract_size":10.000000000000000000,"price_tick":0.000100000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"XRP","contract_code":"XRP201225","contract_type":"next_quarter","contract_size":10.000000000000000000,"price_tick":0.000100000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1},{"symbol":"ETC","contract_code":"ETC200703","contract_type":"this_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"ETC","contract_code":"ETC200710","contract_type":"next_week","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"ETC","contract_code":"ETC200925","contract_type":"quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"ETC","contract_code":"ETC201225","contract_type":"next_quarter","contract_size":10.000000000000000000,"price_tick":0.001000000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1},{"symbol":"TRX","contract_code":"TRX200703","contract_type":"this_week","contract_size":10.000000000000000000,"price_tick":0.000010000000000000,"delivery_date":"20200703","create_date":"20200619","contract_status":1},{"symbol":"TRX","contract_code":"TRX200710","contract_type":"next_week","contract_size":10.000000000000000000,"price_tick":0.000010000000000000,"delivery_date":"20200710","create_date":"20200626","contract_status":1},{"symbol":"TRX","contract_code":"TRX200925","contract_type":"quarter","contract_size":10.000000000000000000,"price_tick":0.000010000000000000,"delivery_date":"20200925","create_date":"20200612","contract_status":1},{"symbol":"TRX","contract_code":"TRX201225","contract_type":"next_quarter","contract_size":10.000000000000000000,"price_tick":0.000010000000000000,"delivery_date":"20201225","create_date":"20200605","contract_status":1}],"ts":1593233943882}
The logs are below.
Jun 21 20:46:28.822 TRACE hyper::client::pool: checkout waiting for idle connection: ("https", api.hbdm.vn) Jun 21 20:46:28.823 DEBUG reqwest::connect: starting new connection: https://api.hbdm.vn/ Jun 21 20:46:28.823 TRACE hyper::client::connect::http: Http::connect; scheme=Some("https"), host=Some("api.hbdm.vn"), port=None Jun 21 20:46:28.823 DEBUG hyper::client::connect::dns: resolving host="api.hbdm.vn" Jun 21 20:46:28.831 DEBUG hyper::client::connect::http: connecting to 13.224.166.33:443 Jun 21 20:46:28.897 TRACE mio::poll: registering with poller Jun 21 20:46:28.897 TRACE mio::sys::unix::kqueue: registering; token=Token(0); interests=Readable | Writable | Error | Hup Jun 21 20:46:30.008 DEBUG hyper::client::connect::http: connected to 13.224.166.33:443 Jun 21 20:46:30.793 TRACE hyper::client::conn: client handshake HTTP/1 Jun 21 20:46:30.793 TRACE hyper::client: handshake complete, spawning background dispatcher task Jun 21 20:46:30.794 TRACE want: signal: Want Jun 21 20:46:30.794 TRACE want: signal found waiting giver, notifying Jun 21 20:46:30.794 TRACE hyper::proto::h1::conn: flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Busy } Jun 21 20:46:30.794 TRACE want: poll_want: taker wants! Jun 21 20:46:30.794 TRACE hyper::client::pool: checkout dropped for ("https", api.hbdm.vn) Jun 21 20:46:30.794 TRACE hyper::proto::h1::role: Client::encode method=GET, body=None Jun 21 20:46:30.794 TRACE hyper::proto::h1::io: detected no usage of vectored write, flattening Jun 21 20:46:30.794 DEBUG hyper::proto::h1::io: flushed 152 bytes Jun 21 20:46:30.794 TRACE hyper::proto::h1::conn: flushed({role=client}): State { reading: Init, writing: KeepAlive, keep_alive: Busy } Jun 21 20:46:31.054 TRACE hyper::proto::h1::conn: Conn::read_head Jun 21 20:46:31.055 TRACE hyper::proto::h1::conn: flushed({role=client}): State { reading: Init, writing: KeepAlive, keep_alive: Busy } Jun 21 20:46:31.157 TRACE hyper::proto::h1::conn: Conn::read_head Jun 21 20:46:31.157 DEBUG hyper::proto::h1::io: read 8192 bytes Jun 21 20:46:31.157 TRACE hyper::proto::h1::role: Response.parse([Header; 100], [u8; 8192]) Jun 21 20:46:31.157 TRACE hyper::proto::h1::role: Response.parse Complete(617) Jun 21 20:46:31.157 DEBUG hyper::proto::h1::io: parsed 18 headers Jun 21 20:46:31.157 DEBUG hyper::proto::h1::conn: incoming body is content-length (7868 bytes) Jun 21 20:46:31.157 TRACE hyper::proto::h1::decode: decode; state=Length(7868) Jun 21 20:46:31.158 TRACE hyper::proto::h1::conn: flushed({role=client}): State { reading: Body(Length(293)), writing: KeepAlive, keep_alive: Busy } Jun 21 20:46:31.158 DEBUG reqwest::async_impl::client: response '200 OK' for https://api.hbdm.vn/api/v1/contract_contract_info Jun 21 20:46:31.158 TRACE hyper::proto::h1::decode: decode; state=Length(293) Jun 21 20:46:31.158 DEBUG hyper::proto::h1::io: read 293 bytes Jun 21 20:46:31.158 DEBUG hyper::proto::h1::conn: incoming body completed Jun 21 20:46:31.158 TRACE hyper::proto::h1::conn: maybe_notify; read_from_io blocked Jun 21 20:46:31.158 TRACE want: signal: Want Jun 21 20:46:31.158 TRACE want: signal found waiting giver, notifying Jun 21 20:46:31.158 TRACE hyper::proto::h1::conn: flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle } Jun 21 20:46:31.158 TRACE want: signal: Want Jun 21 20:46:31.158 TRACE hyper::proto::h1::conn: flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle } Jun 21 20:46:31.158 TRACE want: poll_want: taker wants! Jun 21 20:46:31.158 TRACE hyper::client::pool: put; add idle connection for ("https", api.hbdm.vn) Jun 21 20:46:31.158 DEBUG hyper::client::pool: pooling idle connection for ("https", api.hbdm.vn) Jun 21 20:46:31.159 TRACE want: signal: Want Jun 21 20:46:31.159 TRACE hyper::proto::h1::conn: flushed({role=client}): State { reading: Init, writing: Init, keep_alive: Idle } Error: error decoding response body: data did not match any variant of untagged enum HuobiResponse Jun 21 20:46:31.159 TRACE hyper::proto::h1::dispatch: client tx closed Jun 21 20:46:31.160 TRACE hyper::proto::h1::conn: State::close_read() Jun 21 20:46:31.160 TRACE hyper::proto::h1::conn: State::close_write() Jun 21 20:46:31.160 TRACE hyper::proto::h1::conn: flushed({role=client}): State { reading: Closed, writing: Closed, keep_alive: Disabled } Jun 21 20:46:31.160 TRACE hyper::proto::h1::conn: shut down IO complete Jun 21 20:46:31.160 TRACE mio::poll: deregistering handle with poller Jun 21 20:46:31.160 TRACE want: signal: Closed
My project is here: https://github.com/foonsun/huobi_future_async
Enum Example:https://github.com/foonsun/binance-async-rs/blob/master/src/error.rs#L27
JSON Example:https://github.com/foonsun/binance-async-rs/blob/master/src/transport.rs#L209
I use the projects above to wirte my codes on huobi. The API address is https://api.hbdm.vn/api/v1/contract_contract_info.
The data return is Json formated.
I have tried to fix it for one week.But still I don't know the reason failed.
Pls help me.
Below is my code.My code is copied from https://github.com/foonsun/binance-async-rs/.
The origin response of the api is below.
The logs are below.