///|
fn indices_of_string(s : String, substr : String) -> Array[Json] {
let result : Array[Json] = []
let slen = s.length()
let substr_len = substr.length()
guard substr_len > 0 else { return result }
let mut pos = 0
while pos <= slen - substr_len {
let slice = s[pos:].to_owned()
match slice.find(substr) {
Some(idx) => {
let actual_idx = pos + idx
result.push(Json::number(actual_idx.to_double()))
pos = actual_idx + 1 // Advance by 1 to find overlapping matches
}
None => break
}
}
result
}