Skip to main content

voirs_cli/
cli_types.rs

1//! CLI-specific wrapper types for VoiRS types.
2
3use clap::ValueEnum;
4use std::str::FromStr;
5use voirs_sdk::{AudioFormat, QualityLevel};
6
7/// CLI wrapper for AudioFormat to implement clap traits
8#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
9pub enum CliAudioFormat {
10    Wav,
11    Flac,
12    Mp3,
13    Opus,
14    Ogg,
15}
16
17impl From<CliAudioFormat> for AudioFormat {
18    fn from(cli_format: CliAudioFormat) -> Self {
19        match cli_format {
20            CliAudioFormat::Wav => AudioFormat::Wav,
21            CliAudioFormat::Flac => AudioFormat::Flac,
22            CliAudioFormat::Mp3 => AudioFormat::Mp3,
23            CliAudioFormat::Opus => AudioFormat::Opus,
24            CliAudioFormat::Ogg => AudioFormat::Ogg,
25        }
26    }
27}
28
29impl From<AudioFormat> for CliAudioFormat {
30    fn from(format: AudioFormat) -> Self {
31        match format {
32            AudioFormat::Wav => CliAudioFormat::Wav,
33            AudioFormat::Flac => CliAudioFormat::Flac,
34            AudioFormat::Mp3 => CliAudioFormat::Mp3,
35            AudioFormat::Opus => CliAudioFormat::Opus,
36            AudioFormat::Ogg => CliAudioFormat::Ogg,
37        }
38    }
39}
40
41impl Default for CliAudioFormat {
42    fn default() -> Self {
43        CliAudioFormat::Wav
44    }
45}
46
47/// CLI wrapper for QualityLevel to implement clap traits
48#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
49pub enum CliQualityLevel {
50    Low,
51    Medium,
52    High,
53    Ultra,
54}
55
56impl From<CliQualityLevel> for QualityLevel {
57    fn from(cli_quality: CliQualityLevel) -> Self {
58        match cli_quality {
59            CliQualityLevel::Low => QualityLevel::Low,
60            CliQualityLevel::Medium => QualityLevel::Medium,
61            CliQualityLevel::High => QualityLevel::High,
62            CliQualityLevel::Ultra => QualityLevel::Ultra,
63        }
64    }
65}
66
67impl From<QualityLevel> for CliQualityLevel {
68    fn from(quality: QualityLevel) -> Self {
69        match quality {
70            QualityLevel::Low => CliQualityLevel::Low,
71            QualityLevel::Medium => CliQualityLevel::Medium,
72            QualityLevel::High => CliQualityLevel::High,
73            QualityLevel::Ultra => CliQualityLevel::Ultra,
74        }
75    }
76}
77
78impl Default for CliQualityLevel {
79    fn default() -> Self {
80        CliQualityLevel::High
81    }
82}