RsBundle  Artifact [48e5e71428]

Artifact 48e5e71428c5474696d29843d766fe8cb8c70f0a:

  • File src/saveable.rs — part of check-in [5ec346f328] at 2022-06-17 13:46:02 on branch solver-state — Move `Saveable` to submodule `saveable` (user: fifr size: 1329) [more...]

// Copyright (c) 2022 Frank Fischer <frank-fischer@shadow-soft.de>
//
// This program is free software: you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see  <http://www.gnu.org/licenses/>

//! Trait for saving and restoring the state of some algorithm.

/// A trait for all solvers that can be saved and restored to a persistent state.
pub trait Saveable {
    /// Type of the persistent state.
    type State: Send + Clone;

    /// Type of errors.
    type Err: std::error::Error + Send;

    /// Return a persistent state.
    fn get_state(&self) -> Result<Self::State, Self::Err>;

    /// Set the persistent state.
    ///
    /// Note that this method must not fail, i.e. a `State` object
    /// must always be valid.
    fn set_state(&mut self, state: Self::State) -> Result<(), Self::Err>;
}