Skip to main content

oxilean_codegen/futhark_backend/
futharkloop_traits.rs

1//! # FutharkLoop - Trait Implementations
2//!
3//! This module contains trait implementations for `FutharkLoop`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use super::types::{FutharkLoop, FutharkLoopKind};
12use std::fmt;
13
14impl std::fmt::Display for FutharkLoop {
15    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16        let params: Vec<String> = self
17            .params
18            .iter()
19            .map(|(n, t, i)| format!("({n}: {t} = {i})"))
20            .collect();
21        let param_str = params.join(" ");
22        match &self.kind {
23            FutharkLoopKind::For { var, bound } => {
24                write!(
25                    f,
26                    "loop {} for {var} < {bound} do\n  {}",
27                    param_str, self.body
28                )
29            }
30            FutharkLoopKind::While { cond } => {
31                write!(f, "loop {} while {} do\n  {}", param_str, cond, self.body)
32            }
33            FutharkLoopKind::ForWhile { var, bound, cond } => {
34                write!(
35                    f,
36                    "loop {} for {var} < {bound} while {} do\n  {}",
37                    param_str, cond, self.body
38                )
39            }
40        }
41    }
42}