grb 1.3.0

A Rust API for Gurobi optimizer
Documentation
use grb::prelude::*;
use grb::callback::{CbResult, Callback, Where};

struct ErrorCb {}
struct PanicCb {}

impl Callback for ErrorCb {
  fn callback(&mut self, _: Where) -> CbResult {
    anyhow::bail!("ruh roh")
  }
}

impl Callback for PanicCb {
  fn callback(&mut self, _: Where) -> CbResult {
    panic!("ruh roh")
  }
}

fn run(mut cb: impl Callback) -> grb::Result<()> {
  let mut m = Model::new("")?;
  add_ctsvar!(m)?;
  let result = m.optimize_with_callback(&mut cb);
  match result {
    Err(grb::Error::FromAPI(_, 10011)) => {},
    Err(e) => panic!("unexpected error: {}", e),
    Ok(()) => panic!("expected error"),
  }
  m.optimize()?;
  Ok(())
}

#[test]
fn cb_panics() -> grb::Result<()> {
  run(PanicCb{})
}

#[test]
fn cb_errors() -> grb::Result<()> {
  run(ErrorCb{})
}