sui_faucet/
types.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::FaucetError;
5use serde::{Deserialize, Serialize};
6use sui_sdk::types::{
7    base_types::{ObjectID, SuiAddress},
8    digests::TransactionDigest,
9};
10
11#[derive(Serialize, Deserialize, Debug, Clone)]
12pub enum FaucetRequest {
13    FixedAmountRequest(FixedAmountRequest),
14}
15
16#[derive(Serialize, Deserialize, Debug, Clone)]
17pub struct FixedAmountRequest {
18    pub recipient: SuiAddress,
19}
20
21impl FaucetRequest {
22    pub fn new_fixed_amount_request(recipient: impl Into<SuiAddress>) -> Self {
23        Self::FixedAmountRequest(FixedAmountRequest {
24            recipient: recipient.into(),
25        })
26    }
27}
28
29#[derive(Serialize, Deserialize, Debug)]
30pub enum RequestStatus {
31    Success,
32    Failure(FaucetError),
33}
34
35#[derive(Serialize, Deserialize, Debug)]
36pub struct FaucetResponse {
37    pub status: RequestStatus,
38    pub coins_sent: Option<Vec<CoinInfo>>,
39}
40
41#[derive(Serialize, Deserialize, Debug, Clone)]
42#[serde(rename_all = "camelCase")]
43pub struct CoinInfo {
44    pub amount: u64,
45    pub id: ObjectID,
46    pub transfer_tx_digest: TransactionDigest,
47}
48
49impl From<FaucetError> for FaucetResponse {
50    fn from(value: FaucetError) -> Self {
51        FaucetResponse {
52            status: RequestStatus::Failure(value),
53            coins_sent: None,
54        }
55    }
56}
57
58impl From<reqwest::Error> for FaucetResponse {
59    fn from(value: reqwest::Error) -> Self {
60        FaucetResponse {
61            status: RequestStatus::Failure(FaucetError::internal(value)),
62            coins_sent: None,
63        }
64    }
65}