#![warn(missing_docs)]
#![warn(rust_2018_idioms)]
mod capabilities;
mod compile;
mod convert;
mod engine;
mod error;
mod limits;
mod macros;
mod pool;
mod sandbox;
mod value;
pub use capabilities::{Capabilities, Capability};
pub use compile::{compile_source, compile_file, validate_bytecode, CompileOptions, CompileResult, Metadata};
pub use convert::{FromValue, IntoValue, ValueConversionError};
#[cfg(feature = "serde-support")]
pub use convert::{from_value_serde, to_value_serde};
pub use engine::{Engine, EngineConfig, ExecutionContext, HostRegistry, HostFn};
pub use error::{Error, Result};
pub use macros::typed_host_fn_2;
pub use limits::{Limits, LimitViolation};
pub use pool::{EnginePool, PoolConfig, PoolHandle, PoolStats};
pub use sandbox::{Sandbox, SandboxConfig, PathPolicy, NetPolicy};
pub use value::{Value, ValueType};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub const MIN_FUSABI_VERSION: &str = "0.18.0";
pub const MAX_FUSABI_VERSION: &str = "0.19.0";
pub fn is_compatible_version(version: &str) -> bool {
let parts: Vec<&str> = version.split('.').collect();
if parts.len() < 2 {
return false;
}
let Ok(major) = parts[0].parse::<u32>() else {
return false;
};
let Ok(minor) = parts[1].parse::<u32>() else {
return false;
};
major == 0 && (minor == 18 || minor == 19)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_version_compatibility() {
assert!(is_compatible_version("0.18.0"));
assert!(is_compatible_version("0.18.5"));
assert!(is_compatible_version("0.19.0"));
assert!(!is_compatible_version("0.17.0"));
assert!(!is_compatible_version("0.20.0"));
assert!(!is_compatible_version("1.0.0"));
assert!(!is_compatible_version("invalid"));
}
}