diff --git a/README.md b/README.md index a29793a..5d1d52f 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ cargo test --all In order to run the opensea sudoswap arbitrage strategy, you can run the following command: ```sh -cargo run -- --wss --opensea-api-key --private-key --arb-contract-address --bid-percentage +cargo run --bin artemis -- --wss --opensea-api-key --private-key --arb-contract-address --bid-percentage ``` where `ARB_CONTRACT_ADDRESS` is the address to which you deploy the [arb contract](/crates/strategies/opensea-sudo-arb/contracts/src/SudoOpenseaArb.sol). diff --git a/crates/generator/src/parser.rs b/crates/generator/src/parser.rs index 0ce34e1..5883681 100644 --- a/crates/generator/src/parser.rs +++ b/crates/generator/src/parser.rs @@ -2,7 +2,7 @@ use anyhow::{Error, Result}; use clap::{Parser, ValueHint}; use convert_case::{Case, Casing}; use quote::__private::TokenStream; -use std::fs::{create_dir, File}; +use std::fs::{create_dir, metadata, File}; use std::io::Write; use std::path::{Path, PathBuf}; use std::process::Command; @@ -28,7 +28,7 @@ pub struct StrategyParser { impl StrategyParser { pub fn generate(&self) -> Result<(), Error> { - let snake = self.strategy_name.to_case(Case::Snake); + let kebab = self.strategy_name.to_case(Case::Kebab); let pascal = self.strategy_name.to_case(Case::Pascal); let strategy_data = generate_strategy(&pascal); @@ -36,24 +36,38 @@ impl StrategyParser { let type_data = generate_types(); let lib_data = generate_lib(); - let crate_name = snake; - - generate_crate( - &crate_name, - &self.root, - strategy_data, - constants_data, - type_data, - lib_data, - )?; - + let crate_name = kebab; + + let path: PathBuf = { + let mut p: PathBuf = self.root.to_path_buf(); + p.push(&crate_name); + p + }; + + if !metadata(&path).is_ok() { + generate_crate( + &crate_name, + path, + strategy_data, + constants_data, + type_data, + lib_data, + )?; + return Ok(()); + } + + run_strategy(); Ok(()) } } -fn generate_crate>( +fn run_strategy() { + //TODO run strategy code +} + +fn generate_crate( crate_name: &str, - root: P, + path: PathBuf, strategy: TokenStream, constants: TokenStream, types: TokenStream, @@ -66,12 +80,6 @@ fn generate_crate>( ("async-trait", "0.1.64"), ]; - let path: PathBuf = { - let mut p: PathBuf = root.as_ref().to_path_buf(); - p.push(crate_name); - p - }; - // Create crate directory create_dir(&path)?;