/*
 * Artifact Keeper API
 *
 * Enterprise artifact registry supporting 45+ package formats.  ## Authentication  The JSON management API under `/api/v1/_*` accepts **API tokens only as `Authorization: Bearer <token>`**. This is the canonical scheme for programmatic access; JWTs issued by the login flow also use `Bearer`. HTTP Basic credentials on `/api/v1/_*` are validated *only* as a real `username:password` login — the password half is **not** retried as an API token. A request to `/api/v1/_*` that sends an API token in the password field of Basic auth therefore returns `401 AUTH_ERROR`; switch to `Authorization: Bearer <token>`.  Format (package-manager) endpoints such as `/v2/_*` (OCI), `/incus/_*`, `/debian/_*`, and the language registries are intentionally more permissive for client compatibility: in addition to Bearer, they accept HTTP **Basic** auth with the API token supplied in the *password* field (any username), matching the `pip` netrc / Artifactory-style `token:<api_token>` convention used by package managers that cannot send a Bearer header. This Basic-with-token fallback applies to format endpoints only, never to `/api/v1/_*`.
 *
 * The version of the OpenAPI document: 1.4.1
 * 
 * Generated by: https://openapi-generator.tech
 */

use crate::models;
use serde::{Deserialize, Serialize};

#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct TriggerScanRequest {
    #[serde(rename = "artifact_id", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
    pub artifact_id: Option<Option<uuid::Uuid>>,
    /// Skip the hash-based scan dedup short-circuit when running this scan.  Defaults to `false`. Normal trigger calls dedup against prior completed scans for the same checksum + scan_type so a freshly uploaded byte-identical artifact reuses the existing result instead of re-running the scanner. When `true`, that dedup is skipped: the scanner runs against the bytes again and writes a fresh `scan_results` row. Use this to recover from a silently-broken prior scan (e.g. an extraction bug producing a completed, zero-finding row that masks the real findings until the dedup TTL expires; see #1469). Costs an extra scan run, so leave it unset for routine trigger calls.  **Admin only.** Setting this to `true` bypasses the dedup short- circuit and fans out unbounded scanner work per artifact. The `trigger_scan` handler rejects this field with 403 for non-admin callers, since a non-admin force-rescan path would be a DoS amplifier (the pre-existing `force=true` was naturally rate-limited by dedup; `bypass_dedup` removes that safety).
    #[serde(rename = "bypass_dedup", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
    pub bypass_dedup: Option<Option<bool>>,
    #[serde(rename = "repository_id", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
    pub repository_id: Option<Option<uuid::Uuid>>,
}

impl TriggerScanRequest {
    pub fn new() -> TriggerScanRequest {
        TriggerScanRequest {
            artifact_id: None,
            bypass_dedup: None,
            repository_id: None,
        }
    }
}

