add docs for Law::from_config()
Some checks failed
CI/CD Pipeline / test (push) Has been cancelled

This commit is contained in:
philipp 2024-02-27 08:48:32 +01:00
parent 4a057c47e4
commit d25785984d

View File

@ -19,6 +19,7 @@ use serde::{Deserialize, Serialize};
use std::{ use std::{
cell::RefCell, cell::RefCell,
fmt::{self, Display}, fmt::{self, Display},
path::Path,
rc::Rc, rc::Rc,
sync::Arc, sync::Arc,
}; };
@ -35,12 +36,46 @@ pub struct Law {
} }
impl Law { impl Law {
pub fn from_config(path: &str) -> Result<Law, Error> { /// Creates a `Law` instance from a configuration file.
///
/// This function initializes the law processing pipeline by loading configurations from the
/// specified path, parsing law texts based on these configurations, and assembling a `Law`
/// object. The configuration file is expected to define how law texts should be parsed and
/// processed.
///
/// # Parameters
///
/// - `path`: A path to the configuration file. This can be any type that implements the
/// `AsRef<Path>` trait, allowing for flexible path specifications (e.g., `&str`, `String`,
/// `Path`, or `PathBuf`).
///
/// # Returns
///
/// Returns a `Result` that, on success, contains the `Law` constructed from the provided
/// configuration and parsed law texts. On failure, it returns an `Error` indicating what went
/// wrong during the process.
///
/// # Errors
///
/// This function can return an `Error` in the following scenarios:
///
/// - If loading the configuration from the specified path fails (e.g., file not found,
/// permission issues, or invalid file format). - If the parsing of law texts encounters an
/// error or if the construction of the `Law` object based on the parsed data fails.
///
/// # Examples
///
/// ```
/// use risp::law::Law;
///
/// let law = Law::from_config("./data/configs/abgb.toml").unwrap();
/// ```
pub fn from_config<P: AsRef<Path>>(path: P) -> Result<Law, Error> {
let (law_id, mut builder, parser) = Config::load(path)?; let (law_id, mut builder, parser) = Config::load(path)?;
let pars = parse(law_id).unwrap(); let pars = parse(law_id)?;
for par in pars { for par in pars {
let cont = parser.parse(&par, &mut builder).unwrap(); let cont = parser.parse(&par, &mut builder)?;
if !cont { if !cont {
break; break;
} }