use serde::Deserialize;

#[derive(Deserialize, Clone, Debug)]
pub struct Workspace {
    pub members: Vec<String>,
}

#[derive(Deserialize, Clone, Debug)]
pub struct File {
    pub workspace: Option<Workspace>,
}

impl File {
    pub async fn read_file() -> eyre::Result<Option<Self>> {
        let file = match tokio::fs::read_to_string("Cargo.toml").await {
            Ok(file) => file,
            Err(e) => {
                tracing::warn!("Cargo.toml was not found: {}", e);
                return Ok(None);
            }
        };

        let workspace_file: File = toml::from_str(&file)?;

        Ok(Some(workspace_file))
    }

    pub fn get_workspace_members(&self) -> Option<Vec<String>> {
        self.workspace.as_ref().map(|w| w.members.clone())
    }
}
