ydb 0.17.1

Crate contains generated low-level grpc code from YDB API protobuf, used as base for ydb crate
Documentation
use itertools::Itertools;
use std::borrow::Cow;

pub(crate) const TRACE_VALUE_MAX_LEN: usize = 1000;

pub(crate) fn ensure_len_string<'a, S>(text: S) -> Cow<'a, str>
where
    S: Into<Cow<'a, str>>,
{
    let cow = text.into();

    if cow.len() <= TRACE_VALUE_MAX_LEN {
        cow
    } else {
        let mut truncated = cow.chars().take(TRACE_VALUE_MAX_LEN).join("");
        truncated.push_str("...");
        Cow::Owned(truncated)
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_ensure_len_string_short() {
        let text = "SELECT 1";
        assert_eq!(ensure_len_string(text), text);
    }

    #[test]
    fn test_ensure_len_string_exact() {
        let text: String = "x".repeat(1000);
        assert_eq!(ensure_len_string(&text).len(), 1000);
        assert!(!ensure_len_string(&text).ends_with("..."));
    }

    #[test]
    fn test_ensure_len_string_long() {
        let text: String = "x".repeat(1500);
        let truncated = ensure_len_string(&text);
        assert_eq!(truncated.len(), 1003);
        assert!(truncated.ends_with("..."));
    }
}