Ctrl K
ComunidadGuías…

vlib/json2/attr_utils.v

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
module json2

@[inline]
fn unquote_attr_value(value string) string {
	mut unquoted := value.trim_space()
	if unquoted.len > 1 {
		if (unquoted[0] == `'` && unquoted[unquoted.len - 1] == `'`)
			|| (unquoted[0] == `"` && unquoted[unquoted.len - 1] == `"`) {
			unquoted = unquoted[1..unquoted.len - 1]
		}
	}
	return unquoted
}

@[inline]
fn json_attr_value(attr string) ?string {
	if !attr.starts_with('json:') {
		return none
	}
	return unquote_attr_value(attr[5..])
}

@[markused]
fn json_attr_value_range(attr string) ?(int, int) {
	if !attr.starts_with('json:') {
		return none
	}
	mut start := 5
	for start < attr.len && attr[start] in [` `, `\t`, `\n`, `\r`] {
		start++
	}
	mut end := attr.len
	for end > start && attr[end - 1] in [` `, `\t`, `\n`, `\r`] {
		end--
	}
	if end - start > 1 {
		if (attr[start] == `'` && attr[end - 1] == `'`)
			|| (attr[start] == `"` && attr[end - 1] == `"`) {
			start++
			end--
		}
	}
	return start, end
}

@[inline]
fn enum_uses_json_as_number[T]() bool {
	$for attr in T.attributes {
		if attr.name == 'json_as_number' {
			return true
		}
	}
	return false
}