| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #[macro_use]
- extern crate clap;
- use clap::ArgMatches;
- use drk::cli::{Config, DrkConfig};
- use drk::util::join_config_path;
- use drk::{rpc::jsonrpc, rpc::jsonrpc::JsonResult, Error, Result};
- use log::debug;
- use serde::{Deserialize, Serialize};
- use serde_json::{json, Value};
- use simplelog::{
- CombinedLogger, Config as SimplelogConfig, ConfigBuilder, LevelFilter, TermLogger,
- TerminalMode, WriteLogger,
- };
- use std::path::PathBuf;
- struct Drk {
- url: String,
- }
- impl Drk {
- pub fn new(url: String) -> Self {
- Self { url }
- }
- async fn request(&self, r: jsonrpc::JsonRequest) -> Result<Value> {
- let r = json!(r);
- // create http body from json
- let data = surf::Body::from_json(&r)?;
- debug!(target: "DRK", "--> {:?}", r);
- println!("--> {:?}", r);
- let d2 = surf::Body::from_json(&r)?;
- println!("{:?}", d2.into_string().await);
- // send the data to the server
- let mut req = surf::post(&self.url).body(data).await?;
- // get the response
- let resp = req.take_body();
- // read the response body as a string
- let json = resp.into_string().await?;
- // parse the response into a JsonResult
- println!("{}", json);
- let v: JsonResult = serde_json::from_str(&json)?;
- match v {
- JsonResult::Resp(r) => {
- debug!(target: "DRK", "<-- {:?}", r);
- return Ok(r.result);
- }
- JsonResult::Err(e) => {
- debug!(target: "DRK", "<-- {:?}", e);
- println!("here!");
- return Err(Error::JsonRpcError(e.error.message.to_string()));
- }
- JsonResult::Notif(n) => {
- debug!(target: "DRK", "<-- {:?}", n);
- return Err(Error::JsonRpcError(
- "Unexpected reply from server".to_string(),
- ));
- }
- };
- }
- async fn deposit(&self, network: String, asset: String) -> Result<Value> {
- // create json request
- // method = deposit
- // params = network, asset
- // type = Value
- let req = jsonrpc::request(json!("deposit"), json!([network, asset]));
- // call request function
- Ok(self.request(req).await?)
- }
- }
- #[derive(Serialize, Deserialize, Debug)]
- pub struct XX {
- pub foo: Value,
- }
- async fn start(config: &DrkConfig, options: ArgMatches<'_>) -> Result<()> {
- //let req = json!(jsonrpc::request(
- // json!("deposit"),
- // json!(["solana", "USDC"])
- //));
- ////let x = json!(XX { foo: json!(2) });
- //let ss = req.to_string();
- //println!("{}", ss);
- //let v: jsonrpc::JsonRequest = serde_json::from_str(&ss)?;
- //return Ok(());
- //
- let client = Drk::new(config.rpc_url.clone());
- if let Some(matches) = options.subcommand_matches("deposit") {
- let network = matches.value_of("network").unwrap().to_lowercase();
- let token = matches.value_of("TOKEN").unwrap();
- let reply = client
- .deposit(network.to_string(), token.to_string())
- .await?;
- println!(
- "Deposit your coins to the following address: {}",
- &reply.to_string()
- );
- return Ok(());
- }
- println!("Please run 'drk help' to see usage.");
- Err(Error::MissingParams)
- }
- fn main() -> Result<()> {
- let args = clap_app!(drk =>
- (@subcommand deposit =>
- (about: "Deposit clear assets for Dark assets")
- (@arg network: +required +takes_value --network
- "Which network to use (bitcoin/solana/...)")
- (@arg TOKEN: +required
- "Which token to deposit (BTC/SOL/USDC/...)")
- )
- )
- .get_matches();
- let config_path: PathBuf;
- if args.is_present("CONFIG") {
- config_path = PathBuf::from(args.value_of("CONFIG").unwrap());
- } else {
- config_path = join_config_path(&PathBuf::from("drk.toml"))?;
- }
- let config = Config::<DrkConfig>::load(config_path)?;
- let logger_config = ConfigBuilder::new().set_time_format_str("%T%.6f").build();
- // TODO: --verbose
- let debug_level = if args.is_present("verbose") {
- LevelFilter::Debug
- } else {
- LevelFilter::Off
- };
- let log_path = config.log_path.clone();
- CombinedLogger::init(vec![
- TermLogger::new(debug_level, logger_config, TerminalMode::Mixed).unwrap(),
- WriteLogger::new(
- LevelFilter::Debug,
- SimplelogConfig::default(),
- std::fs::File::create(log_path).unwrap(),
- ),
- ])
- .unwrap();
- futures::executor::block_on(start(&config, args))
- }
|