mod owned;
pub use owned::*;
use crate::prelude::*;
use crate::{placeholder::Placeholder, traits::SQLParam};
#[derive(Debug, Clone)]
pub struct Param<'a, V: SQLParam> {
pub placeholder: Placeholder,
pub value: Option<Cow<'a, V>>,
}
impl<'a, V: SQLParam> Param<'a, V> {
pub fn new(placeholder: Placeholder, value: Option<Cow<'a, V>>) -> Self {
Self { placeholder, value }
}
}
impl<'a, V: SQLParam> From<OwnedParam<V>> for Param<'a, V> {
fn from(value: OwnedParam<V>) -> Self {
Self {
placeholder: value.placeholder,
value: value.value.map(|v| Cow::Owned(v)),
}
}
}
impl<'a, V: SQLParam> From<&'a OwnedParam<V>> for Param<'a, V> {
fn from(value: &'a OwnedParam<V>) -> Self {
Self {
placeholder: value.placeholder,
value: value.value.as_ref().map(|v| Cow::Borrowed(v)),
}
}
}
impl<'a, V: SQLParam> From<Placeholder> for Param<'a, V> {
fn from(value: Placeholder) -> Self {
Self {
placeholder: value,
value: None,
}
}
}
impl<'a, T: SQLParam> Param<'a, T> {
pub const fn positional(value: T) -> Self {
Self {
placeholder: Placeholder::anonymous(),
value: Some(Cow::Owned(value)),
}
}
pub const fn from_placeholder(placeholder: Placeholder) -> Self {
Self {
placeholder,
value: None,
}
}
pub const fn named(name: &'static str, value: T) -> Self {
Self {
placeholder: Placeholder::named(name),
value: Some(Cow::Owned(value)),
}
}
pub const fn with_placeholder(placeholder: Placeholder, value: T) -> Self {
Self {
placeholder,
value: Some(Cow::Owned(value)),
}
}
}
#[derive(Debug, Clone)]
pub struct ParamBind<'a, V: SQLParam> {
pub name: &'a str,
pub value: V,
}
impl<'a, V: SQLParam> ParamBind<'a, V> {
pub const fn new(name: &'a str, value: V) -> Self {
Self { name, value }
}
pub const fn positional(value: V) -> Self {
Self { name: "", value }
}
}