use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use crate::types::StorageProvidedBy;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, FromRow)]
#[serde(rename_all = "camelCase")]
#[sqlx(rename_all = "camelCase")]
pub struct Output {
#[sqlx(rename = "created_at")]
#[serde(
rename = "created_at",
alias = "createdAt",
with = "crate::serde_datetime"
)]
pub created_at: NaiveDateTime,
#[sqlx(rename = "updated_at")]
#[serde(
rename = "updated_at",
alias = "updatedAt",
with = "crate::serde_datetime"
)]
pub updated_at: NaiveDateTime,
pub output_id: i64,
pub user_id: i64,
pub transaction_id: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub basket_id: Option<i64>,
pub spendable: bool,
pub change: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_description: Option<String>,
pub vout: i32,
pub satoshis: i64,
pub provided_by: StorageProvidedBy,
pub purpose: String,
#[sqlx(rename = "type")]
#[serde(rename = "type")]
pub output_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub txid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sender_identity_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub derivation_prefix: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub derivation_suffix: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_instructions: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spent_by: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sequence_number: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub spending_description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub script_length: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub script_offset: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locking_script: Option<Vec<u8>>,
}