greed 0.5.2

A rust tool to automate trades 📈
Documentation
mod do_buy;
pub mod do_factory;
pub mod do_sellall;

use crate::tactic::action::Action;
use crate::tactic::skip::SkipReason;
use crate::tactic::state::TacticState;
use crate::tactic::when::WhenResult;

pub trait DoRule {
    fn evaluate(&self, state: &TacticState, when_result: WhenResult) -> DoResult;
}

#[derive(Debug, Default, PartialEq)]
pub struct DoResult {
    pub actions: Vec<Action>,
    pub skipped: bool,
    pub skip_reason: SkipReason,
}

impl DoResult {
    pub fn skip(reason: SkipReason) -> Self {
        Self {
            skipped: true,
            skip_reason: reason,
            ..Default::default()
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn skip() {
        let result = DoResult::skip(SkipReason::NoTargetAssets);
        let expected = DoResult {
            skipped: true,
            skip_reason: SkipReason::NoTargetAssets,
            ..Default::default()
        };
        assert_eq!(expected, result);
    }
}