cargo_flutter/
config.rs

1use crate::cargo::Cargo;
2use crate::error::Error;
3use serde::Deserialize;
4
5#[derive(Debug, Clone, Deserialize)]
6pub struct TomlConfig {
7    pub package: TomlPackage,
8}
9
10#[derive(Debug, Clone, Deserialize)]
11pub struct TomlPackage {
12    pub name: String,
13    pub metadata: Option<TomlMetadata>,
14}
15
16#[derive(Debug, Default, Clone, Deserialize)]
17pub struct TomlMetadata {
18    pub flutter: Option<TomlFlutter>,
19    pub apk: Option<crate::package::apk::TomlApk>,
20    pub appimage: Option<crate::package::appimage::TomlAppImage>,
21}
22
23#[derive(Debug, Default, Clone, Deserialize)]
24pub struct TomlFlutter {
25    pub engine_version: Option<String>,
26}
27
28impl TomlConfig {
29    pub fn load(cargo: &Cargo) -> Result<Self, Error> {
30        let package = cargo.package()?;
31        let bytes = std::fs::read(package.manifest_path())?;
32        let string = std::str::from_utf8(&bytes)?;
33        Ok(toml::from_str(string)?)
34    }
35
36    pub fn metadata(&self) -> TomlMetadata {
37        self.package.metadata.clone().unwrap_or_default()
38    }
39}
40
41impl TomlMetadata {
42    pub fn engine_version(&self) -> Option<String> {
43        self.flutter.clone().unwrap_or_default().engine_version
44    }
45}