flowfull 0.1.0

Async Rust client for Flowfull and Flowless-compatible backends
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

use crate::auth::types::User;

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct SessionData {
    pub user_id: String,
    pub email: String,
    pub name: Option<String>,
    pub user_type: Option<String>,
    pub organization_id: Option<String>,
    #[serde(default)]
    pub permissions: Vec<String>,
    pub expires_at: Option<DateTime<Utc>>,
    pub validated_at: DateTime<Utc>,
    pub user: Option<User>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
pub struct ValidationOptions {
    pub ip: Option<String>,
    pub user_agent: Option<String>,
    pub device_id: Option<String>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ValidationMode {
    Disabled,
    Standard,
    Advanced,
    Strict,
}

impl ValidationMode {
    pub fn build_options(
        self,
        ip: Option<String>,
        user_agent: Option<String>,
        device_id: Option<String>,
    ) -> ValidationOptions {
        match self {
            Self::Disabled => ValidationOptions::default(),
            Self::Standard => ValidationOptions {
                ip,
                user_agent: None,
                device_id: None,
            },
            Self::Advanced => ValidationOptions {
                ip,
                user_agent,
                device_id: None,
            },
            Self::Strict => ValidationOptions {
                ip,
                user_agent,
                device_id,
            },
        }
    }
}