Packages
oaspec
0.15.0
0.68.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.59.0
0.58.1
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.3
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.1.3
Generate Gleam code from OpenAPI 3.x specifications
Current section
Files
Jump to
Current section
Files
src/oaspec/util/string_extra.gleam
import gleam/list
import gleam/string
import gleam/string_tree.{type StringTree}
/// Type alias for StringTree used as a mutable string builder throughout codegen.
pub type StringBuilder =
StringTree
/// Create a new empty string builder.
pub fn new() -> StringTree {
string_tree.new()
}
/// Append a line to the string builder.
pub fn line(sb: StringTree, text: String) -> StringTree {
sb
|> string_tree.append(text)
|> string_tree.append("\n")
}
/// Append an indented line to the string builder.
pub fn indent(sb: StringTree, level: Int, text: String) -> StringTree {
let spaces = string.repeat(" ", level)
sb
|> string_tree.append(spaces)
|> string_tree.append(text)
|> string_tree.append("\n")
}
/// Append a blank line.
pub fn blank_line(sb: StringTree) -> StringTree {
sb
|> string_tree.append("\n")
}
/// Generate a file header with auto-generation notice.
pub fn file_header(version: String) -> StringTree {
new()
|> line("// Code generated by oaspec v" <> version <> ". DO NOT EDIT.")
|> blank_line()
}
/// Generate import statements.
pub fn imports(sb: StringTree, modules: List(String)) -> StringTree {
let sb =
list.fold(modules, sb, fn(sb, module) { sb |> line("import " <> module) })
sb |> blank_line()
}
/// Convert the string builder to a final string.
pub fn to_string(sb: StringTree) -> String {
string_tree.to_string(sb)
}
/// Join a list of strings with a separator.
pub fn join_with(items: List(String), separator: String) -> String {
string.join(items, separator)
}
/// Wrap a string in Gleam doc comment style.
pub fn doc_comment(sb: StringTree, text: String) -> StringTree {
case text {
"" -> sb
_ -> {
let lines = string.split(text, "\n")
list.fold(lines, sb, fn(sb, l) { sb |> line("/// " <> l) })
}
}
}