///|
pub struct SourceRegistry {
entries : Array[DataSource]
} derive(Debug, Eq)
///|
pub fn source_registry() -> SourceRegistry {
{ entries: [] }
}
///|
pub fn SourceRegistry::add(
self : SourceRegistry,
value : DataSource,
) -> SourceRegistry {
for index, existing in self.entries {
if existing.citation == value.citation {
if existing.url == "" && value.url != "" {
self.entries[index] = value
}
return self
}
}
self.entries.push(value)
self
}
///|
pub fn SourceRegistry::add_all(
self : SourceRegistry,
values : Array[DataSource],
) -> SourceRegistry {
let mut current = self
for value in values {
current = current.add(value)
}
current
}
///|
pub fn SourceRegistry::sources(self : SourceRegistry) -> Array[DataSource] {
self.entries.copy()
}
///|
pub fn SourceRegistry::has_url(self : SourceRegistry, url : String) -> Bool {
for value in self.entries {
if value.url == url {
break true
}
} nobreak {
false
}
}
///|
pub fn SourceRegistry::to_markdown(self : SourceRegistry) -> String {
let lines : Array[String] = []
for value in self.entries {
let url = if value.url == "" { "" } else { " (\{value.url})" }
lines.push("- **\{value.label}**: \{value.citation}\{url}")
}
lines.join("\n")
}