Validate fields

use "../utils"

primitive ValidateFields
  fun apply(pr: Array[PreReleaseField], build: Array[String]): Array[String] =>
    let errs = Array[String]

    for (i, field) in pr.pairs() do
      match field
      | let s: String =>
        let err = _validate_string_Field("pre-release", i, s)
        if (err != "") then errs.push(err) end
      end
    end

    for (i, field) in build.pairs() do
      let err = _validate_string_Field("build", i, field)
      if (err != "") then errs.push(err) end
    end

    errs

  fun _validate_string_Field(setName: String, i: USize, field: String): String =>
    let fieldId = setName + " field " + (i + 1).string()

    if (field == "") then
      fieldId + " is blank"
    elseif (not Strings.contains_only(field, Consts.alphanums())) then
      fieldId + " contains non-alphanumeric characters"
    else
      ""
    end