cognitive_services_speech_sdk_rs/speech/
auto_detect_source_language_config.rs1use crate::common::PropertyCollection;
2use crate::error::{convert_err, Result};
3use crate::ffi::{
4 add_source_lang_config_to_auto_detect_source_lang_config,
5 auto_detect_source_lang_config_get_property_bag, auto_detect_source_lang_config_release,
6 create_auto_detect_source_lang_config_from_languages,
7 create_auto_detect_source_lang_config_from_open_range,
8 create_auto_detect_source_lang_config_from_source_lang_config, SmartHandle,
9 SPXAUTODETECTSOURCELANGCONFIGHANDLE, SPXPROPERTYBAGHANDLE,
10};
11use crate::speech::SourceLanguageConfig;
12use std::ffi::CString;
13use std::mem::MaybeUninit;
14
15#[derive(Debug)]
17pub struct AutoDetectSourceLanguageConfig {
18 pub handle: SmartHandle<SPXAUTODETECTSOURCELANGCONFIGHANDLE>,
19 pub properties: PropertyCollection,
20}
21
22impl AutoDetectSourceLanguageConfig {
23 unsafe fn from_handle(handle: SPXAUTODETECTSOURCELANGCONFIGHANDLE) -> Result<Self> {
26 unsafe {
27 let mut prop_bag_handle: MaybeUninit<SPXPROPERTYBAGHANDLE> = MaybeUninit::uninit();
28
29 let ret = auto_detect_source_lang_config_get_property_bag(
30 handle,
31 prop_bag_handle.as_mut_ptr(),
32 );
33 convert_err(ret, "AutoDetectSourceLanguageConfig::from_handle error")?;
34
35 let property_bag = PropertyCollection::from_handle(prop_bag_handle.assume_init());
36 Ok(AutoDetectSourceLanguageConfig {
37 handle: SmartHandle::create(
38 "AutoDetectSourceLanguageConfig",
39 handle,
40 auto_detect_source_lang_config_release,
41 ),
42 properties: property_bag,
43 })
44 }
45 }
46
47 pub fn from_languages(languages: Vec<String>) -> Result<Self> {
49 unsafe {
50 let languages_str = languages.join(",");
51 let c_languages_str = CString::new(languages_str)?;
52 let mut handle: MaybeUninit<SPXAUTODETECTSOURCELANGCONFIGHANDLE> =
53 MaybeUninit::uninit();
54 let ret = create_auto_detect_source_lang_config_from_languages(
55 handle.as_mut_ptr(),
56 c_languages_str.as_ptr(),
57 );
58 convert_err(ret, "AutoDetectSourceLanguageConfig::from_languages error")?;
59 AutoDetectSourceLanguageConfig::from_handle(handle.assume_init())
60 }
61 }
62
63 pub fn from_language_configs(languages: Vec<SourceLanguageConfig>) -> Result<Self> {
65 unsafe {
66 let mut first = true;
67 let mut handle: MaybeUninit<SPXAUTODETECTSOURCELANGCONFIGHANDLE> =
68 MaybeUninit::uninit();
69 for language in &languages {
70 let ret;
71 if first {
72 first = false;
73 ret = create_auto_detect_source_lang_config_from_source_lang_config(
74 handle.as_mut_ptr(),
75 language.handle.inner(),
76 );
77 } else {
78 ret = add_source_lang_config_to_auto_detect_source_lang_config(
79 handle.assume_init(),
80 language.handle.inner(),
81 );
82 }
83 convert_err(
84 ret,
85 "AutoDetectSourceLanguageConfig::from_language_configs error",
86 )?;
87 }
88
89 AutoDetectSourceLanguageConfig::from_handle(handle.assume_init())
90 }
91 }
92
93 pub fn from_open_range() -> Result<Self> {
95 unsafe {
96 let mut handle: MaybeUninit<SPXAUTODETECTSOURCELANGCONFIGHANDLE> =
97 MaybeUninit::uninit();
98 let ret = create_auto_detect_source_lang_config_from_open_range(handle.as_mut_ptr());
99 convert_err(ret, "AutoDetectSourceLanguageConfig::from_open_range error")?;
100 AutoDetectSourceLanguageConfig::from_handle(handle.assume_init())
101 }
102 }
103}