russcip 0.6.2

Rust interface for SCIP
Documentation
use crate::{Model, Retcode};

pub trait ScipParameter: Sized {
    fn set<T>(model: Model<T>, name: &str, value: Self) -> Result<Model<T>, Retcode>;
    fn get<T>(model: &Model<T>, name: &str) -> Self;
}

impl ScipParameter for f64 {
    fn set<T>(model: Model<T>, name: &str, value: f64) -> Result<Model<T>, Retcode> {
        let model = model.set_real_param(name, value)?;
        Ok(model)
    }

    fn get<T>(model: &Model<T>, name: &str) -> f64 {
        model.real_param(name)
    }
}

impl ScipParameter for i32 {
    fn set<T>(model: Model<T>, name: &str, value: i32) -> Result<Model<T>, Retcode> {
        let model = model.set_int_param(name, value)?;
        Ok(model)
    }

    fn get<T>(model: &Model<T>, name: &str) -> i32 {
        model.int_param(name)
    }
}

impl ScipParameter for bool {
    fn set<T>(model: Model<T>, name: &str, value: bool) -> Result<Model<T>, Retcode> {
        let model = model.set_bool_param(name, value)?;
        Ok(model)
    }

    fn get<T>(model: &Model<T>, name: &str) -> bool {
        model.bool_param(name)
    }
}

impl ScipParameter for i64 {
    fn set<T>(model: Model<T>, name: &str, value: i64) -> Result<Model<T>, Retcode> {
        let model = model.set_longint_param(name, value)?;
        Ok(model)
    }

    fn get<T>(model: &Model<T>, name: &str) -> i64 {
        model.longint_param(name)
    }
}

impl ScipParameter for String {
    fn set<T>(model: Model<T>, name: &str, value: String) -> Result<Model<T>, Retcode> {
        let model = model.set_str_param(name, &value)?;
        Ok(model)
    }

    fn get<T>(model: &Model<T>, name: &str) -> String {
        model.str_param(name)
    }
}