ckb-std 1.1.0

This library contains serveral modules help you write CKB contract with Rust
extern crate alloc;

use crate::syscalls;
use alloc::format;
use log::{Level, Metadata, Record};
use log::{LevelFilter, SetLoggerError};

struct SimpleLogger;

impl log::Log for SimpleLogger {
    fn enabled(&self, _metadata: &Metadata) -> bool {
        true
    }

    fn log(&self, record: &Record) {
        let metadata = record.metadata();
        if self.enabled(metadata) {
            let level = metadata.level();
            match level {
                Level::Error => syscalls::debug(format!(
                    "[\x1b[31m{}\x1b[0m {}:{}] {}",
                    record.level(),
                    record.file().unwrap_or("???"),
                    record.line().unwrap_or(0),
                    record.args()
                )),
                Level::Warn => syscalls::debug(format!(
                    "[\x1b[33m{}\x1b[0m  {}:{}] {}",
                    record.level(),
                    record.file().unwrap_or("???"),
                    record.line().unwrap_or(0),
                    record.args()
                )),
                Level::Info => syscalls::debug(format!(
                    "[\x1b[32m{}\x1b[0m  {}:{}] {}",
                    record.level(),
                    record.file().unwrap_or("???"),
                    record.line().unwrap_or(0),
                    record.args()
                )),
                Level::Debug => syscalls::debug(format!(
                    "[\x1b[34m{}\x1b[0m {}:{}] {}",
                    record.level(),
                    record.file().unwrap_or("???"),
                    record.line().unwrap_or(0),
                    record.args()
                )),
                Level::Trace => syscalls::debug(format!(
                    "[\x1b[36m{}\x1b[0m {}:{}] {}",
                    record.level(),
                    record.file().unwrap_or("???"),
                    record.line().unwrap_or(0),
                    record.args()
                )),
            }
        }
    }

    fn flush(&self) {}
}

static LOGGER: SimpleLogger = SimpleLogger;

pub fn init() -> Result<(), SetLoggerError> {
    log::set_logger(&LOGGER).map(|()| log::set_max_level(LevelFilter::Trace))
}