use std::marker::PhantomData;
use cratestack_policy::ReadPolicy;
use super::{ModelColumn, ReadSource};
#[derive(Debug, Clone, Copy)]
pub struct ViewDescriptor<V, PK> {
pub schema_name: &'static str,
pub view_name: &'static str,
pub columns: &'static [ModelColumn],
pub primary_key: &'static str,
pub allowed_fields: &'static [&'static str],
pub allowed_sorts: &'static [&'static str],
pub read_allow_policies: &'static [ReadPolicy],
pub read_deny_policies: &'static [ReadPolicy],
pub detail_allow_policies: &'static [ReadPolicy],
pub detail_deny_policies: &'static [ReadPolicy],
pub is_materialized: bool,
pub source_tables: &'static [&'static str],
_marker: PhantomData<fn() -> (V, PK)>,
}
impl<V, PK> ViewDescriptor<V, PK> {
#[allow(clippy::too_many_arguments)]
pub const fn new(
schema_name: &'static str,
view_name: &'static str,
columns: &'static [ModelColumn],
primary_key: &'static str,
allowed_fields: &'static [&'static str],
allowed_sorts: &'static [&'static str],
read_allow_policies: &'static [ReadPolicy],
read_deny_policies: &'static [ReadPolicy],
detail_allow_policies: &'static [ReadPolicy],
detail_deny_policies: &'static [ReadPolicy],
is_materialized: bool,
source_tables: &'static [&'static str],
) -> Self {
Self {
schema_name,
view_name,
columns,
primary_key,
allowed_fields,
allowed_sorts,
read_allow_policies,
read_deny_policies,
detail_allow_policies,
detail_deny_policies,
is_materialized,
source_tables,
_marker: PhantomData,
}
}
}
impl<V, PK> ReadSource<V, PK> for ViewDescriptor<V, PK> {
fn schema_name(&self) -> &'static str {
self.schema_name
}
fn table_name(&self) -> &'static str {
self.view_name
}
fn columns(&self) -> &'static [ModelColumn] {
self.columns
}
fn primary_key(&self) -> &'static str {
self.primary_key
}
fn allowed_fields(&self) -> &'static [&'static str] {
self.allowed_fields
}
fn allowed_includes(&self) -> &'static [&'static str] {
&[]
}
fn allowed_sorts(&self) -> &'static [&'static str] {
self.allowed_sorts
}
fn read_allow_policies(&self) -> &'static [ReadPolicy] {
self.read_allow_policies
}
fn read_deny_policies(&self) -> &'static [ReadPolicy] {
self.read_deny_policies
}
fn detail_allow_policies(&self) -> &'static [ReadPolicy] {
self.detail_allow_policies
}
fn detail_deny_policies(&self) -> &'static [ReadPolicy] {
self.detail_deny_policies
}
fn soft_delete_column(&self) -> Option<&'static str> {
None
}
}