#[cfg(feature = "fukurow-core")]
pub use fukurow_core as core;
#[cfg(feature = "fukurow-store")]
pub use fukurow_store as store;
#[cfg(feature = "fukurow-rules")]
pub use fukurow_rules as rules;
#[cfg(feature = "fukurow-engine")]
pub use fukurow_engine as engine;
#[cfg(feature = "fukurow-domain-cyber")]
pub use fukurow_domain_cyber as domain_cyber;
#[cfg(feature = "fukurow-api")]
pub use fukurow_api as api;
#[cfg(feature = "fukurow-cli")]
pub use fukurow_cli as cli;
#[cfg(feature = "fukurow-core")]
pub use fukurow_core::model;
#[cfg(feature = "fukurow-engine")]
pub use fukurow_engine::{ReasonerEngine, ReasonerError};
#[cfg(feature = "fukurow-store")]
pub use fukurow_store::{RdfStore, Provenance};
#[cfg(feature = "fukurow-rules")]
pub use fukurow_rules::{Rule, RuleRegistry};
#[cfg(feature = "fukurow-domain-cyber")]
pub use fukurow_domain_cyber::threat_intelligence::{ThreatProcessor, IndicatorType};
pub use serde;
pub use serde_json;
pub use anyhow;
pub use tokio;
pub mod prelude {
#[cfg(feature = "fukurow-core")]
pub use crate::model::*;
#[cfg(feature = "fukurow-engine")]
pub use crate::ReasonerEngine;
#[cfg(feature = "fukurow-engine")]
pub use crate::ReasonerError;
#[cfg(feature = "fukurow-store")]
pub use crate::RdfStore;
#[cfg(feature = "fukurow-store")]
pub use crate::Provenance;
#[cfg(feature = "fukurow-rules")]
pub use crate::Rule;
#[cfg(feature = "fukurow-rules")]
pub use crate::RuleRegistry;
#[cfg(feature = "fukurow-domain-cyber")]
pub use crate::ThreatProcessor;
#[cfg(feature = "fukurow-domain-cyber")]
pub use crate::IndicatorType;
pub use serde::{Deserialize, Serialize};
pub use serde_json::Value;
pub use anyhow::Result;
pub use tokio;
}
#[cfg(feature = "fukurow-domain-cyber")]
pub mod cyber {
pub use fukurow_domain_cyber::*;
}
#[cfg(all(feature = "fukurow-engine", feature = "fukurow-rules"))]
pub mod reasoning {
pub use fukurow_engine::*;
pub use fukurow_rules::*;
}
#[cfg(feature = "fukurow-api")]
pub mod web {
pub use fukurow_api::*;
}
#[cfg(feature = "fukurow-cli")]
pub mod cli_tools {
pub use fukurow_cli::*;
}
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub mod build_info {
pub const BUILD_TIME: &str = "2024-01-01T00:00:00Z";
pub const GIT_SHA: &str = "unknown";
pub const GIT_COMMIT_DATE: &str = "2024-01-01T00:00:00Z";
}
pub fn health_check() -> serde_json::Value {
serde_json::json!({
"status": "healthy",
"version": VERSION,
"timestamp": chrono::Utc::now().to_rfc3339(),
"modules": {
"core": true,
"store": true,
"rules": true,
"engine": true,
"domain_cyber": true,
"api": true,
"cli": true
}
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_health_check() {
let health = health_check();
assert_eq!(health["status"], "healthy");
assert_eq!(health["version"], VERSION);
}
#[test]
fn test_version_constant() {
assert!(!VERSION.is_empty());
assert!(VERSION.starts_with('v') || VERSION.chars().all(|c| c.is_ascii_digit() || c == '.'));
}
#[cfg(all(feature = "fukurow-engine", feature = "fukurow-store"))]
#[tokio::test]
async fn test_basic_engine_creation() {
let engine = ReasonerEngine::new();
let _store = engine.get_graph_store().await;
}
}