Skip to main content

oxirs_arq/query/
query_traits.rs

1//! # Query - Trait Implementations
2//!
3//! This module contains trait implementations for `Query`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use std::fmt;
12
13use super::types::{Query, QueryType};
14
15impl fmt::Display for Query {
16    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
17        match self.query_type {
18            QueryType::Select => {
19                write!(f, "SELECT ")?;
20                if self.distinct {
21                    write!(f, "DISTINCT ")?;
22                } else if self.reduced {
23                    write!(f, "REDUCED ")?;
24                }
25                if self.select_variables.is_empty() {
26                    write!(f, "* ")?;
27                } else {
28                    for (i, var) in self.select_variables.iter().enumerate() {
29                        if i > 0 {
30                            write!(f, " ")?;
31                        }
32                        write!(f, "?{var}", var = var.as_str())?;
33                    }
34                    write!(f, " ")?;
35                }
36                write!(f, "WHERE {{ {:?} }}", self.where_clause)?;
37            }
38            QueryType::Construct => {
39                write!(f, "CONSTRUCT {{ ")?;
40                for (i, pattern) in self.construct_template.iter().enumerate() {
41                    if i > 0 {
42                        write!(f, " . ")?;
43                    }
44                    write!(f, "{pattern:?}")?;
45                }
46                write!(f, " }} WHERE {{ {:?} }}", self.where_clause)?;
47            }
48            QueryType::Ask => {
49                write!(f, "ASK WHERE {{ {:?} }}", self.where_clause)?;
50            }
51            QueryType::Describe => {
52                write!(f, "DESCRIBE ")?;
53                if self.select_variables.is_empty() {
54                    write!(f, "* ")?;
55                } else {
56                    for (i, var) in self.select_variables.iter().enumerate() {
57                        if i > 0 {
58                            write!(f, " ")?;
59                        }
60                        write!(f, "?{var}", var = var.as_str())?;
61                    }
62                    write!(f, " ")?;
63                }
64                write!(f, "WHERE {{ {:?} }}", self.where_clause)?;
65            }
66        }
67        if let Some(limit) = self.limit {
68            write!(f, " LIMIT {limit}")?;
69        }
70        if let Some(offset) = self.offset {
71            write!(f, " OFFSET {offset}")?;
72        }
73        Ok(())
74    }
75}