prisma_auth 0.2.0

A simple authentication crate supporting both Rocket backend API and Yew frontend authentication components
Documentation
// src/types.rs
use serde::{Deserialize, Serialize};

/// Login credentials with optional username for multi-user support
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct LoginRequest {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    pub password: String,
}

/// New user registration data
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RegisterRequest {
    pub username: String,
    pub password: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
}

/// Authentication token response with user info
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TokenResponse {
    pub token: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub username: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
}

/// User account with role and permissions
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct User {
    pub username: String,
    pub password_hash: String,
    pub role: String,
    pub permissions: Vec<String>,
    pub created_at: u64,
    pub last_login: Option<u64>,
}

/// Role definition with permissions
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Role {
    pub name: String,
    pub permissions: Vec<String>,
    pub description: Option<String>,
}

/// Local storage key for JWT tokens
pub const TOKEN_KEY: &str = "auth_token";
/// Default token expiration time in seconds (10 minutes)
pub const DEFAULT_TOKEN_TTL_SECONDS: u64 = 600;