1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use crate::cargo::Cargo;
use crate::error::Error;
use serde::Deserialize;

#[derive(Debug, Clone, Deserialize)]
pub struct TomlConfig {
    pub package: TomlPackage,
}

#[derive(Debug, Clone, Deserialize)]
pub struct TomlPackage {
    pub name: String,
    pub metadata: Option<TomlMetadata>,
}

#[derive(Debug, Default, Clone, Deserialize)]
pub struct TomlMetadata {
    pub flutter: Option<TomlFlutter>,
    pub apk: Option<crate::package::apk::TomlApk>,
    pub appimage: Option<crate::package::appimage::TomlAppImage>,
}

#[derive(Debug, Default, Clone, Deserialize)]
pub struct TomlFlutter {
    pub engine_version: Option<String>,
}

impl TomlConfig {
    pub fn load(cargo: &Cargo) -> Result<Self, Error> {
        let package = cargo.package()?;
        let bytes = std::fs::read(package.manifest_path())?;
        let string = std::str::from_utf8(&bytes)?;
        Ok(toml::from_str(string)?)
    }

    pub fn metadata(&self) -> TomlMetadata {
        self.package.metadata.clone().unwrap_or_default()
    }
}

impl TomlMetadata {
    pub fn engine_version(&self) -> Option<String> {
        self.flutter.clone().unwrap_or_default().engine_version
    }
}