in src/scala/config/src/main/scala/com/twitter/emoji/config/YamlParser.scala [49:114]
def apply(source: String): Config = {
// Shimmed out version of internal com.twitter.config.yaml.YamlLoader
// so all of Twemoji can be open-sourced
val yamlLoader = new Yaml
val yaml = try {
yamlLoader.load(source)
} catch {
case _: ClassCastException => {
val resource = getClass.getResourceAsStream(source)
val loadedYaml = yamlLoader.load[JList[JMap[String, Any]]](resource)
resource.close()
loadedYaml
}
}
// collect all the items lists within the top-level elements
val categories = yaml.asScala.map { category =>
val id = category.get("id").asInstanceOf[String]
val title = category.get("title").asInstanceOf[String]
val items = category
.get("items")
.asInstanceOf[JList[JMap[String, Any]]]
.asScala
.map { item =>
val codepoints =
item.get("unicode").asInstanceOf[String].split("-").map { v =>
Integer.parseInt(v, 16)
}
val emojiType = Option(item.get("type").asInstanceOf[String])
.map { EmojiType(_) }
.getOrElse(EmojiType.Normal)
// In this yaml reader, Boolean defaults to false when item not present.
// Casting to a String to check for null is not allowed
val excludeFromPicker =
item.get("exclude_from_picker").asInstanceOf[Boolean]
val multiDiversityConfig =
if (emojiType == EmojiType.MultiDiversity)
Some(
MultiDiversityConfig(
item.get("multi_diversity_base_same").asInstanceOf[String],
item
.get("multi_diversity_base_different")
.asInstanceOf[String],
item
.get("multi_diversity_base_different_is_sorted")
.asInstanceOf[Boolean]
))
else None
Item(
codepoints = CodePoints(codepoints, !excludeFromPicker),
description = item.get("description").asInstanceOf[String],
emojiType = emojiType,
excludeFromPicker = excludeFromPicker,
keywords = Option(item.get("keywords").asInstanceOf[String]),
multiDiversityConfig = multiDiversityConfig
)
}
Category(
id = id,
title = title,
items = items
)
}
Config(categories)
}