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}