---
source: graph-api-derive/src/render.rs
expression: formatted
---
#[derive(PartialEq, Eq, Clone, Copy, Hash, Debug)]
pub enum EdgeLabel {
Knows,
Created,
Language,
}
impl graph_api_lib::Label for EdgeLabel {
type Index = EdgeIndex;
fn variants() -> &'static [EdgeLabel] {
static VARIANTS: [EdgeLabel; 3usize] = [
EdgeLabel::Knows,
EdgeLabel::Created,
EdgeLabel::Language,
];
&VARIANTS
}
fn indexes(&self) -> &'static [EdgeIndex] {
match self {
EdgeLabel::Knows => {
static INDEXES: [EdgeIndex; 0usize] = [];
&INDEXES
}
EdgeLabel::Created => {
static INDEXES: [EdgeIndex; 0usize] = [];
&INDEXES
}
EdgeLabel::Language => {
static INDEXES: [EdgeIndex; 0usize] = [];
&INDEXES
}
}
}
fn ordinal(&self) -> usize {
*self as usize
}
fn name(&self) -> &'static str {
match self {
EdgeLabel::Knows => stringify!(Knows),
EdgeLabel::Created => stringify!(Created),
EdgeLabel::Language => stringify!(Language),
}
}
}
#[derive(PartialEq, Eq, Clone, Copy, Hash, Debug)]
pub enum EdgeIndex {}
impl graph_api_lib::Index for EdgeIndex {
fn ty(&self) -> core::any::TypeId {
unreachable!("this index enum has no variants")
}
fn ordinal(&self) -> usize {
unreachable!("this index enum has no variants")
}
fn index_type(&self) -> graph_api_lib::IndexType {
unreachable!("this index enum has no variants")
}
}
impl graph_api_lib::Element for Edge {
type Label = EdgeLabel;
fn label(&self) -> Self::Label {
match self {
Edge::Knows { .. } => EdgeLabel::Knows,
Edge::Created => EdgeLabel::Created,
Edge::Language(_) => EdgeLabel::Language,
}
}
}
impl Edge {
pub fn knows<'search, Graph>() -> graph_api_lib::EdgeSearch<'search, Graph>
where
Graph: graph_api_lib::Graph<Edge = Edge> + graph_api_lib::SupportsEdgeLabelIndex,
{
graph_api_lib::EdgeSearch::label(EdgeLabel::Knows)
}
pub fn created<'search, Graph>() -> graph_api_lib::EdgeSearch<'search, Graph>
where
Graph: graph_api_lib::Graph<Edge = Edge> + graph_api_lib::SupportsEdgeLabelIndex,
{
graph_api_lib::EdgeSearch::label(EdgeLabel::Created)
}
pub fn language<'search, Graph>() -> graph_api_lib::EdgeSearch<'search, Graph>
where
Graph: graph_api_lib::Graph<Edge = Edge> + graph_api_lib::SupportsEdgeLabelIndex,
{
graph_api_lib::EdgeSearch::label(EdgeLabel::Language)
}
}
pub use __edge_projection_edge_knows::Knows;
pub use __edge_projection_edge_knows::KnowsMut;
mod __edge_projection_edge_knows {
use super::*;
pub struct Knows<'reference, Element> {
_phantom: std::marker::PhantomData<Element>,
since: &'reference i32,
}
impl<'reference, Element> Knows<'reference, Element> {
pub fn since<'a>(&self) -> i32 {
*self.since
}
}
pub struct KnowsMut<'reference, Element, MutationListener> {
_phantom: std::marker::PhantomData<Element>,
__listener: MutationListener,
since: &'reference mut i32,
}
impl<
'reference,
Element,
MutationListener,
> KnowsMut<'reference, Element, MutationListener> {
pub fn since<'a>(&self) -> i32 {
*self.since
}
pub fn set_since(&mut self, value: i32) {
*self.since = value;
}
}
impl<'reference> graph_api_lib::Project<'reference, Edge>
for Knows<'reference, Edge> {
fn project(weight: &'reference Edge) -> Option<Self> {
if let Edge::Knows { since } = weight {
Some(Knows {
_phantom: std::default::Default::default(),
since,
})
} else {
None
}
}
}
impl<
'reference,
MutationListener,
> graph_api_lib::ProjectMut<'reference, Edge, MutationListener>
for KnowsMut<'reference, Edge, MutationListener>
where
MutationListener: graph_api_lib::MutationListener<'reference, Edge>,
{
fn project_mut(
weight: &'reference mut Edge,
mutation_listener: MutationListener,
) -> Option<Self> {
if let Edge::Knows { since } = weight {
Some(KnowsMut {
_phantom: std::default::Default::default(),
__listener: mutation_listener,
since,
})
} else {
None
}
}
}
}
pub trait EdgeExt<'graph, Mutability, Graph, Walker>
where
Walker: graph_api_lib::EdgeWalker<'graph, Graph = Graph>,
Graph: graph_api_lib::Graph<Edge = Edge>,
{
fn filter_by_knows<F: Fn(Knows<Graph::Edge>, &Walker::Context) -> bool>(
self,
filter: F,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
>;
fn filter_knows(
self,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
>;
fn filter_created(
self,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
>;
fn filter_by_language<F: Fn(&Language, &Walker::Context) -> bool>(
self,
filter: F,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
>;
fn filter_language(
self,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
>;
}
impl<'graph, Mutability, Graph, Walker> EdgeExt<'graph, Mutability, Graph, Walker>
for graph_api_lib::EdgeWalkerBuilder<'graph, Mutability, Graph, Walker>
where
Walker: graph_api_lib::EdgeWalker<'graph, Graph = Graph>,
Graph: graph_api_lib::Graph<Edge = Edge>,
{
fn filter_by_knows<F: Fn(Knows<Graph::Edge>, &Walker::Context) -> bool>(
self,
filter: F,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
> {
self.filter(move |f, c| {
if let Some(projection) = graph_api_lib::EdgeReference::project(f) {
(filter)(projection, c)
} else {
false
}
})
}
fn filter_knows(
self,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
> {
self.filter(move |f, _| match graph_api_lib::EdgeReference::weight(f) {
Edge::Knows { .. } => true,
_ => false,
})
}
fn filter_created(
self,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
> {
self.filter(|f, _| match graph_api_lib::EdgeReference::weight(f) {
Edge::Created { .. } => true,
_ => false,
})
}
fn filter_by_language<F: Fn(&Language, &Walker::Context) -> bool>(
self,
filter: F,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
> {
self.filter(move |f, c| match graph_api_lib::EdgeReference::weight(f) {
Edge::Language(param0) => (filter)(param0, c),
_ => false,
})
}
fn filter_language(
self,
) -> graph_api_lib::EdgeWalkerBuilder<
'graph,
Mutability,
Graph,
impl graph_api_lib::EdgeWalker<'graph, Graph = Graph, Context = Walker::Context>,
> {
self.filter(move |f, _| match graph_api_lib::EdgeReference::weight(f) {
Edge::Language(..) => true,
_ => false,
})
}
}