Better stuff

This commit is contained in:
2026-08-06 07:42:08 +02:00
parent 480bd679b0
commit 5be80214fc
4 changed files with 75 additions and 8 deletions
+56
View File
@@ -0,0 +1,56 @@
use std::{collections::HashMap, path::PathBuf};
use crate::executor::pump_fun::PumpDevAccount;
use anyhow::{Context, anyhow};
use serde::{Deserialize, Serialize};
pub fn get_accounts_path() -> anyhow::Result<PathBuf> {
Ok(std::env::home_dir()
.context("Failed to get home dir")?
.join(".config")
.join("sol-hunter")
.join("accounts.json"))
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Account {
PumpDev(PumpDevAccount),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccountManger {
pub active: String,
pub accounts: HashMap<String, Account>,
}
impl AccountManger {
pub async fn get() -> anyhow::Result<Self> {
let path = get_accounts_path()?;
if !path.exists() {
let default = Self::new().await?;
tokio::fs::create_dir_all(path.parent().unwrap()).await?;
tokio::fs::write(&path, default.to_string()?).await?;
return Ok(default);
}
let output = tokio::fs::read_to_string(path).await?;
Self::from_str(&output)
}
pub async fn new() -> anyhow::Result<Self> {
Err(anyhow!("Not implemented yet"))
}
pub fn from_str(s: &str) -> anyhow::Result<Self> {
serde_json::from_str(s).context("Failed to parse accounts")
}
pub fn to_string(&self) -> anyhow::Result<String> {
serde_json::to_string(self).context("Failed to serialize accounts")
}
}
+12 -7
View File
@@ -1,15 +1,10 @@
pub mod pump_fun;
use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
use tokio::sync::Mutex;
use crate::executor::pump_fun::PumpDevAccount;
use crate::account::Account;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Account {
PumpDev(PumpDevAccount),
}
#[allow(async_fn_in_trait, unused_variables)]
pub trait Executor {
@@ -33,3 +28,13 @@ pub trait Executor {
Ok(())
}
}
impl Account {
pub fn executor(self) -> impl Executor {
match self {
Self::PumpDev(account) => pump_fun::PumpDev {
account: Mutex::new(account),
},
}
}
}
+1
View File
@@ -1,3 +1,4 @@
pub mod account;
pub mod executor;
pub mod types;