use chrono::{NaiveDate, NaiveDateTime};
use encoding_rs::GBK;
use crate::error::{Error, Result as SdkResult};
pub fn gbk_to_utf8(bytes: &[u8]) -> SdkResult<String> {
let (decoded, _, had_errors) = GBK.decode(bytes);
if had_errors {
return Err(Error::Encoding("Failed to decode GBK string".to_string()));
}
Ok(decoded.to_string())
}
pub fn utf8_to_gbk(s: &str) -> SdkResult<Vec<u8>> {
let (encoded, _, had_errors) = GBK.encode(s);
if had_errors {
return Err(Error::Encoding("Failed to encode string to GBK".to_string()));
}
Ok(encoded.into_owned())
}
pub fn parse_dameng_date(s: &str) -> SdkResult<NaiveDate> {
NaiveDate::parse_from_str(s, "%Y-%m-%d")
.map_err(|e| Error::Parse(e))
}
pub fn parse_dameng_datetime(s: &str) -> SdkResult<NaiveDateTime> {
NaiveDateTime::parse_from_str(s, "%Y-%m-%d %H:%M:%S")
.map_err(|e| Error::Parse(e))
}
pub fn format_dameng_date(date: &NaiveDate) -> String {
date.format("%Y-%m-%d").to_string()
}
pub fn format_dameng_datetime(datetime: &NaiveDateTime) -> String {
datetime.format("%Y-%m-%d %H:%M:%S").to_string()
}
pub fn escape_sql_string(s: &str) -> String {
s.replace('\'', "''")
}