1pub mod compiler;
24pub mod config;
25pub mod conversion;
26pub mod dictionary;
27pub mod error;
28
29use config::Config;
30use conversion::ConversionChain;
31use error::Result;
32use std::path::Path;
33
34include!(concat!(env!("OUT_DIR"), "/embedded_map.rs"));
35
36pub struct OpenCC {
38 name: String,
40 conversion_chain: ConversionChain,
42}
43
44impl OpenCC {
45 pub fn new<P: AsRef<Path>>(config_path: P) -> Result<Self> {
56 let config = Config::from_file(config_path)?;
58 let config_dir = config.get_config_directory();
59
60 let conversion_chain = ConversionChain::from_config(&config.conversion_chain, config_dir)?;
62
63 Ok(Self {
64 name: config.name,
65 conversion_chain,
66 })
67 }
68
69 pub fn from_config_name(name: &str) -> Result<Self> {
71 use crate::dictionary::embedded;
72
73 let config_str = embedded::EMBEDDED_CONFIGS
74 .get(name)
75 .ok_or_else(|| error::OpenCCError::ConfigNotFound(name.to_string()))?;
76
77 let config: Config = config_str.parse()?;
79
80 let conversion_chain = ConversionChain::from_config_embedded(&config.conversion_chain)?;
81
82 Ok(Self {
83 name: config.name,
84 conversion_chain,
85 })
86 }
87
88 pub fn convert(&self, input: &str) -> String {
98 self.conversion_chain.convert(input)
99 }
100
101 pub fn name(&self) -> &str {
103 &self.name
104 }
105}