use super::ModelConfig;
use crate::error::{NeuralError, Result};
pub struct ConfigSerializer;
impl ConfigSerializer {
pub fn to_json(config: &ModelConfig, pretty: bool) -> Result<String> {
if pretty {
serde_json::to_string_pretty(config).map_err(|e| {
NeuralError::SerializationError(format!("Failed to serialize to JSON: {}", e))
})
} else {
serde_json::to_string(config).map_err(|e| {
NeuralError::SerializationError(format!("Failed to serialize to JSON: {}", e))
})
}
}
pub fn to_yaml(config: &ModelConfig) -> Result<String> {
serde_yaml::to_string(config).map_err(|e| {
NeuralError::SerializationError(format!("Failed to serialize to YAML: {}", e))
})
}
pub fn from_json(json: &str) -> Result<ModelConfig> {
serde_json::from_str(json).map_err(|e| {
NeuralError::DeserializationError(format!("Failed to deserialize from JSON: {}", e))
})
}
pub fn from_yaml(yaml: &str) -> Result<ModelConfig> {
serde_yaml::from_str(yaml).map_err(|e| {
NeuralError::DeserializationError(format!("Failed to deserialize from YAML: {}", e))
})
}
}
pub struct ConfigBuilder;
impl ConfigBuilder {
pub fn resnet50(input_channels: usize, num_classes: usize) -> ModelConfig {
use crate::models::architectures::ResNetConfig;
ModelConfig::ResNet(ResNetConfig::resnet50(input_channels, num_classes))
}
pub fn bert_base() -> ModelConfig {
use crate::models::architectures::BertConfig;
ModelConfig::Bert(BertConfig::bert_base_uncased())
}
pub fn efficientnet_b0(input_channels: usize, num_classes: usize) -> ModelConfig {
use crate::models::architectures::EfficientNetConfig;
ModelConfig::EfficientNet(EfficientNetConfig::efficientnet_b0(
input_channels,
num_classes,
))
}
}