secs-project 0.15.3

.secs project files, migrations, role vocabulary, measurement plans and the .irs store.
Documentation
use crate::PyJsonError;
use std::io;
use thiserror::Error;

#[derive(Debug, Error)]
pub enum ProjectError {
    #[error("invalid project JSON: {0}")]
    Json(#[from] PyJsonError),
    #[error("invalid project: {0}")]
    Invalid(String),
    #[error("I/O error: {0}")]
    Io(#[from] io::Error),
    #[error("invalid WAV: {0}")]
    Wav(String),
    #[error("measurement IR path for {entry} escapes the project .irs directory: {path}")]
    IrPath {
        entry: String,
        path: std::path::PathBuf,
    },
}