hyperqit 0.1.1

rust sdk for interacting with hyperliquid
Documentation
use std::sync::Arc;

use axum::{Json, extract::State};
use serde::{Deserialize, Serialize};

use crate::services::{CurrentUserPositionResponse, OpenPositionRequest, StrategyManagerService};

#[derive(Deserialize, Serialize)]
pub struct ResponseJson<T> {
    data: T,
}

pub async fn create_new_position(
    State(manager_svc): State<Arc<StrategyManagerService>>,
    Json(req): Json<OpenPositionRequest>,
) -> Result<Json<ResponseJson<CurrentUserPositionResponse>>, String> {
    match manager_svc.open_position(req).await {
        Ok(response) => Ok(Json(ResponseJson { data: response })),
        Err(e) => Err(format!("error opening position: {:?}", e)),
    }
}

pub async fn get_current_position(
    State(manager_svc): State<Arc<StrategyManagerService>>,
) -> Result<Json<ResponseJson<CurrentUserPositionResponse>>, String> {
    match manager_svc.current_user_position().await {
        Ok(response) => Ok(Json(ResponseJson { data: response })),
        Err(e) => Err(format!("error getting current position: {:?}", e)),
    }
}

pub async fn close_position(
    State(manager_svc): State<Arc<StrategyManagerService>>,
) -> Result<Json<ResponseJson<String>>, String> {
    match manager_svc.close_position().await {
        Ok(response) => Ok(Json(ResponseJson { data: response })),
        Err(e) => Err(format!("error closing position: {:?}", e)),
    }
}