grafbase_local_backend/api/
unlink.rs

1use super::{consts::PROJECT_METADATA_FILE, errors::ApiError};
2use common::environment::Environment;
3use std::fs;
4
5/// # Errors
6///
7/// - returns [`BackendError::UnlinkedProject`] if the project is not linked
8///
9/// - returns [`BackendError::DeleteProjectMetadataFile`] if ~/.grafbase/project.json could not be deleted
10///
11/// - returns [`BackendError::ReadProjectMetadataFile`] if ~/.grafbase/project.json could not be read
12pub fn unlink() -> Result<(), ApiError> {
13    let environment = Environment::get();
14
15    let project_metadata_path = environment.project_dot_grafbase_path.join(PROJECT_METADATA_FILE);
16
17    match project_metadata_path.try_exists() {
18        Ok(true) => fs::remove_file(project_metadata_path).map_err(ApiError::DeleteProjectMetadataFile),
19        Ok(false) => Err(ApiError::UnlinkedProject),
20        Err(error) => Err(ApiError::ReadProjectMetadataFile(error)),
21    }
22}