things3-cloud 0.8.0

Command-line client for Things 3 using the Things Cloud API
Documentation
use std::{fs, path::PathBuf};

const APP_NAME: &str = "things3";
const LEGACY_APP_NAME: &str = "things-cli";

fn xdg_state_home() -> PathBuf {
    if let Ok(custom) = std::env::var("XDG_STATE_HOME") {
        return PathBuf::from(custom);
    }
    dirs::home_dir()
        .unwrap_or_else(|| PathBuf::from("."))
        .join(".local")
        .join("state")
}

pub fn app_state_dir() -> PathBuf {
    let state_home = xdg_state_home();
    let target = state_home.join(APP_NAME);
    let legacy = state_home.join(LEGACY_APP_NAME);

    if target.exists() || !legacy.exists() {
        return target;
    }

    if fs::rename(&legacy, &target).is_ok() {
        return target;
    }

    target
}

pub fn append_log_dir() -> PathBuf {
    app_state_dir().join("append-log")
}

pub fn auth_file_path() -> PathBuf {
    app_state_dir().join("auth.json")
}