def apply()

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)
  }