gleam-spacetraders-sdk/src/endpoints/agents.gleam
Lily Rose 07793041b6
Some checks are pending
test / test (push) Waiting to run
Make page and limit optional
2025-06-17 23:20:23 +10:00

99 lines
2.9 KiB
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/option.{type Option}
import models/agent.{type Agent}
import models/agent_event.{type AgentEvent}
import models/agent_symbol.{type AgentSymbol}
import models/public_agent.{type PublicAgent}
import utils/api.{type ApiResponse, type PagedData}
import utils/auth.{type AgentToken, AgentAuth}
pub type ListPublicAgentsResponse {
ListPublicAgentsResponse(agents: List(PublicAgent))
}
fn list_public_agents_response_decoder() -> Decoder(ListPublicAgentsResponse) {
use agents <- decode.then(decode.list(public_agent.decoder()))
decode.success(ListPublicAgentsResponse(agents:))
}
pub fn list_public_agents(
token: AgentToken,
page: Option(Int),
limit: Option(Int),
) -> ApiResponse(PagedData(ListPublicAgentsResponse)) {
let request = api.get_page(AgentAuth(token), "/agents", page, limit)
use response <- api.try_send(request)
case response.status {
200 ->
api.parse_paged_data_response(
response,
list_public_agents_response_decoder(),
)
_ -> api.parse_error_response(response)
}
}
pub type GetPublicAgentResponse {
GetPublicAgentResponse(agent: PublicAgent)
}
fn get_public_agent_response_decoder() -> Decoder(GetPublicAgentResponse) {
use agent <- decode.then(public_agent.decoder())
decode.success(GetPublicAgentResponse(agent:))
}
pub fn get_public_agent(
token: AgentToken,
agent_symbol: AgentSymbol,
) -> ApiResponse(GetPublicAgentResponse) {
let request =
api.get(
AgentAuth(token),
"/agents/" <> agent_symbol.to_string(agent_symbol),
)
use response <- api.try_send(request)
case response.status {
200 ->
api.parse_data_response(response, get_public_agent_response_decoder())
_ -> api.parse_error_response(response)
}
}
pub type GetAgentResponse {
GetAgentResponse(agent: Agent)
}
fn get_agent_response_decoder() -> decode.Decoder(GetAgentResponse) {
use agent <- decode.then(agent.decoder())
decode.success(GetAgentResponse(agent:))
}
pub fn get_agent(token: AgentToken) -> ApiResponse(GetAgentResponse) {
let request = api.get(AgentAuth(token), "/my/agent")
use response <- api.try_send(request)
case response.status {
200 -> api.parse_data_response(response, get_agent_response_decoder())
_ -> api.parse_error_response(response)
}
}
pub type GetAgentEventsResponse {
GetAgentEventsResponse(events: List(AgentEvent))
}
fn get_agent_events_response_decoder() -> Decoder(GetAgentEventsResponse) {
use events <- decode.then(decode.list(agent_event.decoder()))
decode.success(GetAgentEventsResponse(events:))
}
pub fn get_agent_events(
token: AgentToken,
) -> ApiResponse(GetAgentEventsResponse) {
let request = api.get(AgentAuth(token), "/my/agent/events")
use response <- api.try_send(request)
case response.status {
200 ->
api.parse_data_response(response, get_agent_events_response_decoder())
_ -> api.parse_error_response(response)
}
}