[INFO] cloning repository https://github.com/LittleGuest/hairy-crabs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/LittleGuest/hairy-crabs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLittleGuest%2Fhairy-crabs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLittleGuest%2Fhairy-crabs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 53652468f337d0d35b7cc5fb33ef8e50ee6ea5d4
[INFO] testing LittleGuest/hairy-crabs against beta-2023-04-20 for beta-1.70-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLittleGuest%2Fhairy-crabs" "/workspace/builds/worker-6-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc2/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/LittleGuest/hairy-crabs on toolchain beta-2023-04-20
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2023-04-20" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/LittleGuest/hairy-crabs
[INFO] finished tweaking git repo https://github.com/LittleGuest/hairy-crabs
[INFO] tweaked toml for git repo https://github.com/LittleGuest/hairy-crabs written to /workspace/builds/worker-6-tc2/source/Cargo.toml
[INFO] crate git repo https://github.com/LittleGuest/hairy-crabs already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2023-04-20" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded validator_types v0.14.0
[INFO] [stderr]   Downloaded rust_decimal v1.23.1
[INFO] [stderr]   Downloaded validator v0.14.0
[INFO] [stderr]   Downloaded async_static v0.1.3
[INFO] [stderr]   Downloaded simple_asn1 v0.6.1
[INFO] [stderr]   Downloaded poem-derive v1.3.29
[INFO] [stderr]   Downloaded codepage v0.1.1
[INFO] [stderr]   Downloaded validator_derive v0.14.0
[INFO] [stderr]   Downloaded jsonwebtoken v8.1.0
[INFO] [stderr]   Downloaded calamine v0.18.0
[INFO] [stderr]   Downloaded html_parser v0.6.3
[INFO] [stderr]   Downloaded poem v1.3.29
[INFO] [stderr]   Downloaded num-bigint-dig v0.8.1
[INFO] [stderr]   Downloaded redis v0.21.5
[INFO] [stderr]   Downloaded libxlsxwriter-sys v1.1.1
[INFO] [stderr]   Downloaded sqlx-core v0.5.13
[INFO] [stderr]   Downloaded rbson v2.0.3
[INFO] [stderr]   Downloaded rbatis_sql v3.0.23
[INFO] [stderr]   Downloaded rbatis v3.1.6
[INFO] [stderr]   Downloaded crypto-bigint v0.3.2
[INFO] [stderr]   Downloaded rsa v0.6.1
[INFO] [stderr]   Downloaded xlsxwriter v0.3.5
[INFO] [stderr]   Downloaded pkcs1 v0.3.3
[INFO] [stderr]   Downloaded zeroize v1.5.5
[INFO] [stderr]   Downloaded pem-rfc7468 v0.3.1
[INFO] [stderr]   Downloaded ipnetwork v0.17.0
[INFO] [stderr]   Downloaded base64ct v1.5.0
[INFO] [stderr]   Downloaded sqlx-rt v0.5.13
[INFO] [stderr]   Downloaded rbatis-macro-driver v3.1.1
[INFO] [stderr]   Downloaded rbatis_sql_macro v3.0.15
[INFO] [stderr]   Downloaded fast_log v1.5.1
[INFO] [stderr]   Downloaded rbatis-core v3.1.7
[INFO] [stderr]   Downloaded simple_redis v0.6.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5ff2268d62e97bff2cde7d5815dd6ed5b47097566f13b8d0ca110b04b60e07ed" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2023-04-20" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] a7736b1cce82ab0e5b06b957d8dc0bb2263d449ced6b8df34fc9c346e4a592bb
[INFO] running `Command { std: "docker" "start" "-a" "a7736b1cce82ab0e5b06b957d8dc0bb2263d449ced6b8df34fc9c346e4a592bb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "a7736b1cce82ab0e5b06b957d8dc0bb2263d449ced6b8df34fc9c346e4a592bb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a7736b1cce82ab0e5b06b957d8dc0bb2263d449ced6b8df34fc9c346e4a592bb", kill_on_drop: false }`
[INFO] [stdout] a7736b1cce82ab0e5b06b957d8dc0bb2263d449ced6b8df34fc9c346e4a592bb
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5ff2268d62e97bff2cde7d5815dd6ed5b47097566f13b8d0ca110b04b60e07ed" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2023-04-20" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] c45093701ee540c3383a530a671fa339f5dc7e15fc723208528ab2f56c19337d
[INFO] running `Command { std: "docker" "start" "-a" "c45093701ee540c3383a530a671fa339f5dc7e15fc723208528ab2f56c19337d", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.37
[INFO] [stderr]    Compiling unicode-xid v0.2.2
[INFO] [stderr]    Compiling syn v1.0.91
[INFO] [stderr]    Compiling libc v0.2.124
[INFO] [stderr]    Compiling serde_derive v1.0.136
[INFO] [stderr]    Compiling serde v1.0.136
[INFO] [stderr]    Compiling memchr v2.4.1
[INFO] [stderr]    Compiling lazy_static v1.4.0
[INFO] [stderr]    Compiling once_cell v1.12.0
[INFO] [stderr]    Compiling log v0.4.16
[INFO] [stderr]    Compiling itoa v1.0.1
[INFO] [stderr]    Compiling libm v0.2.2
[INFO] [stderr]    Compiling ahash v0.7.6
[INFO] [stderr]    Compiling num-traits v0.2.14
[INFO] [stderr]    Compiling cc v1.0.73
[INFO] [stderr]    Compiling regex-syntax v0.6.25
[INFO] [stderr]    Compiling quote v1.0.18
[INFO] [stderr]    Compiling getrandom v0.2.6
[INFO] [stderr]    Compiling aho-corasick v0.7.18
[INFO] [stderr]    Compiling rand_core v0.6.3
[INFO] [stderr]    Compiling smallvec v1.8.0
[INFO] [stderr]    Compiling ppv-lite86 v0.2.16
[INFO] [stderr]    Compiling hashbrown v0.11.2
[INFO] [stderr]    Compiling num-integer v0.1.44
[INFO] [stderr]    Compiling lock_api v0.4.7
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling indexmap v1.8.1
[INFO] [stderr]    Compiling typenum v1.15.0
[INFO] [stderr]    Compiling regex v1.5.5
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling generic-array v0.14.5
[INFO] [stderr]    Compiling bytes v1.1.0
[INFO] [stderr]    Compiling pin-project-lite v0.2.8
[INFO] [stderr]    Compiling futures-core v0.3.21
[INFO] [stderr]    Compiling serde_json v1.0.81
[INFO] [stderr]    Compiling ryu v1.0.9
[INFO] [stderr]    Compiling parking_lot_core v0.9.2
[INFO] [stderr]    Compiling crossbeam-utils v0.8.8
[INFO] [stderr]    Compiling num_cpus v1.13.1
[INFO] [stderr]    Compiling time v0.1.43
[INFO] [stderr]    Compiling matches v0.1.9
[INFO] [stderr]    Compiling tinyvec_macros v0.1.0
[INFO] [stderr]    Compiling tinyvec v1.5.1
[INFO] [stderr]    Compiling ring v0.16.20
[INFO] [stderr]    Compiling futures-sink v0.3.21
[INFO] [stderr]    Compiling parking_lot v0.12.0
[INFO] [stderr]    Compiling form_urlencoded v1.0.1
[INFO] [stderr]    Compiling socket2 v0.4.4
[INFO] [stderr]    Compiling unicode-normalization v0.1.19
[INFO] [stderr]    Compiling signal-hook-registry v1.4.0
[INFO] [stderr]    Compiling futures-channel v0.3.21
[INFO] [stderr]    Compiling unicode-bidi v0.3.7
[INFO] [stderr]    Compiling futures-task v0.3.21
[INFO] [stderr]    Compiling ucd-trie v0.1.3
[INFO] [stderr]    Compiling futures-util v0.3.21
[INFO] [stderr]    Compiling pest v2.1.3
[INFO] [stderr]    Compiling idna v0.2.3
[INFO] [stderr]    Compiling block-buffer v0.10.2
[INFO] [stderr]    Compiling crypto-common v0.1.3
[INFO] [stderr]    Compiling futures-io v0.3.21
[INFO] [stderr]    Compiling slab v0.4.6
[INFO] [stderr]    Compiling maplit v1.0.2
[INFO] [stderr]    Compiling subtle v2.4.1
[INFO] [stderr]    Compiling byteorder v1.4.3
[INFO] [stderr]    Compiling base64ct v1.5.0
[INFO] [stderr]    Compiling crypto-bigint v0.3.2
[INFO] [stderr]    Compiling pest_meta v2.1.3
[INFO] [stderr]    Compiling url v2.2.2
[INFO] [stderr]    Compiling pem-rfc7468 v0.3.1
[INFO] [stderr]    Compiling digest v0.10.3
[INFO] [stderr]    Compiling standback v0.2.17
[INFO] [stderr]    Compiling parking_lot_core v0.8.5
[INFO] [stderr]    Compiling const-oid v0.7.1
[INFO] [stderr]    Compiling async-trait v0.1.53
[INFO] [stderr]    Compiling der v0.5.1
[INFO] [stderr]    Compiling pest_generator v2.1.3
[INFO] [stderr]    Compiling num-iter v0.1.43
[INFO] [stderr]    Compiling instant v0.1.12
[INFO] [stderr]    Compiling webpki v0.21.4
[INFO] [stderr]    Compiling crossbeam-queue v0.3.5
[INFO] [stderr]    Compiling cpufeatures v0.2.2
[INFO] [stderr]    Compiling zeroize v1.5.5
[INFO] [stderr]    Compiling spki v0.5.4
[INFO] [stderr]    Compiling sct v0.6.1
[INFO] [stderr]    Compiling num-bigint v0.3.3
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]    Compiling const_fn v0.4.9
[INFO] [stderr]    Compiling pkg-config v0.3.25
[INFO] [stderr]    Compiling num-bigint-dig v0.8.1
[INFO] [stderr]    Compiling parking_lot v0.11.2
[INFO] [stderr]    Compiling pkcs8 v0.8.0
[INFO] [stderr]    Compiling proc-macro-error-attr v1.0.4
[INFO] [stderr]    Compiling sha-1 v0.10.0
[INFO] [stderr]    Compiling tracing-core v0.1.26
[INFO] [stderr]    Compiling time v0.2.27
[INFO] [stderr]    Compiling rust_decimal v1.23.1
[INFO] [stderr]    Compiling minimal-lexical v0.2.1
[INFO] [stderr]    Compiling hex v0.4.3
[INFO] [stderr]    Compiling libsqlite3-sys v0.24.2
[INFO] [stderr]    Compiling proc-macro-error v1.0.4
[INFO] [stderr]    Compiling nom v7.1.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.30
[INFO] [stderr]    Compiling tokio-macros v1.7.0
[INFO] [stderr]    Compiling futures-macro v0.3.21
[INFO] [stderr]    Compiling pest_derive v2.1.0
[INFO] [stderr]    Compiling time-macros-impl v0.1.2
[INFO] [stderr]    Compiling pin-project-internal v1.0.10
[INFO] [stderr]    Compiling pkcs1 v0.3.3
[INFO] [stderr]    Compiling http v0.2.6
[INFO] [stderr]    Compiling thiserror v1.0.30
[INFO] [stderr]    Compiling spin v0.9.3
[INFO] [stderr]    Compiling arrayvec v0.7.2
[INFO] [stderr]    Compiling unicode_categories v0.1.1
[INFO] [stderr]    Compiling time-macros v0.1.1
[INFO] [stderr]    Compiling crc-catalog v1.1.1
[INFO] [stderr]    Compiling rsa v0.6.1
[INFO] [stderr]    Compiling tracing-attributes v0.1.20
[INFO] [stderr]    Compiling crc v2.1.0
[INFO] [stderr]    Compiling futures-intrusive v0.4.0
[INFO] [stderr]    Compiling pin-project v1.0.10
[INFO] [stderr]    Compiling webpki-roots v0.21.1
[INFO] [stderr]    Compiling flume v0.10.12
[INFO] [stderr]    Compiling sha2 v0.10.2
[INFO] [stderr]    Compiling stringprep v0.1.2
[INFO] [stderr]    Compiling atoi v0.4.0
[INFO] [stderr]    Compiling hashlink v0.7.0
[INFO] [stderr]    Compiling uncased v0.9.6
[INFO] [stderr]    Compiling bit-vec v0.6.3
[INFO] [stderr]    Compiling event-listener v2.5.2
[INFO] [stderr]    Compiling paste v1.0.7
[INFO] [stderr]    Compiling tracing v0.1.34
[INFO] [stderr]    Compiling dashmap v4.0.2
[INFO] [stderr]    Compiling num-bigint v0.4.3
[INFO] [stderr]    Compiling futures-executor v0.3.21
[INFO] [stderr]    Compiling httparse v1.7.0
[INFO] [stderr]    Compiling futures v0.3.21
[INFO] [stderr]    Compiling quickcheck v1.0.3
[INFO] [stderr]    Compiling atty v0.2.14
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]    Compiling time-macros v0.2.4
[INFO] [stderr]    Compiling num_threads v0.1.6
[INFO] [stderr]    Compiling try-lock v0.2.3
[INFO] [stderr]    Compiling httpdate v1.0.2
[INFO] [stderr]    Compiling siphasher v0.3.10
[INFO] [stderr]    Compiling phf_shared v0.10.0
[INFO] [stderr]    Compiling headers-core v0.2.0
[INFO] [stderr]    Compiling http-body v0.4.4
[INFO] [stderr]    Compiling validator_types v0.14.0
[INFO] [stderr]    Compiling combine v4.6.3
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.8
[INFO] [stderr]    Compiling glob v0.3.0
[INFO] [stderr]    Compiling termcolor v1.1.3
[INFO] [stderr]    Compiling if_chain v1.0.2
[INFO] [stderr]    Compiling tower-service v0.3.1
[INFO] [stderr]    Compiling itoa v0.4.8
[INFO] [stderr]    Compiling time v0.3.9
[INFO] [stderr]    Compiling dtoa v0.4.8
[INFO] [stderr]    Compiling ansi_term v0.12.1
[INFO] [stderr]    Compiling anyhow v1.0.56
[INFO] [stderr]    Compiling validator_derive v0.14.0
[INFO] [stderr]    Compiling clang-sys v1.3.1
[INFO] [stderr]    Compiling headers v0.3.7
[INFO] [stderr]    Compiling simple_asn1 v0.6.1
[INFO] [stderr]    Compiling pem v1.0.2
[INFO] [stderr]    Compiling chrono v0.4.19
[INFO] [stderr]    Compiling mio v0.8.2
[INFO] [stderr]    Compiling rustls v0.19.1
[INFO] [stderr]    Compiling tokio v1.17.0
[INFO] [stderr]    Compiling either v1.6.1
[INFO] [stderr]    Compiling uuid v0.8.2
[INFO] [stderr]    Compiling itertools v0.10.3
[INFO] [stderr]    Compiling html_parser v0.6.3
[INFO] [stderr]    Compiling serde_bytes v0.11.5
[INFO] [stderr]    Compiling rbson v2.0.3
[INFO] [stderr]    Compiling bigdecimal v0.2.2
[INFO] [stderr]    Compiling rbatis_sql_macro v3.0.15
[INFO] [stderr]    Compiling sqlformat v0.1.8
[INFO] [stderr]    Compiling ipnetwork v0.17.0
[INFO] [stderr]    Compiling rbatis-macro-driver v3.1.1
[INFO] [stderr]    Compiling toml v0.5.9
[INFO] [stderr]    Compiling want v0.3.0
[INFO] [stderr]    Compiling redis v0.21.5
[INFO] [stderr]    Compiling rbatis_sql v3.0.23
[INFO] [stderr]    Compiling tokio-rustls v0.22.0
[INFO] [stderr]    Compiling tokio-stream v0.1.8
[INFO] [stderr]    Compiling sqlx-rt v0.5.13
[INFO] [stderr]    Compiling tokio-util v0.7.1
[INFO] [stderr]    Compiling sqlx-core v0.5.13
[INFO] [stderr]    Compiling h2 v0.3.13
[INFO] [stderr]    Compiling proc-macro-crate v1.1.3
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling nom v5.1.2
[INFO] [stderr]    Compiling validator v0.14.0
[INFO] [stderr]    Compiling poem-derive v1.3.29
[INFO] [stderr]    Compiling jsonwebtoken v8.1.0
[INFO] [stderr]    Compiling simple_redis v0.6.1
[INFO] [stderr]    Compiling phf_generator v0.10.0
[INFO] [stderr]    Compiling async_static v0.1.3
[INFO] [stderr]    Compiling thread_local v1.1.4
[INFO] [stderr]    Compiling unicode-width v0.1.9
[INFO] [stderr]    Compiling textwrap v0.11.0
[INFO] [stderr]    Compiling phf_codegen v0.10.0
[INFO] [stderr]    Compiling crossbeam-deque v0.8.1
[INFO] [stderr]    Compiling hyper v0.14.18
[INFO] [stderr]    Compiling phf v0.10.1
[INFO] [stderr]    Compiling crossbeam-channel v0.5.4
[INFO] [stderr]    Compiling parse-zoneinfo v0.3.0
[INFO] [stderr]    Compiling libloading v0.7.3
[INFO] [stderr]    Compiling humantime v2.1.0
[INFO] [stderr]    Compiling bindgen v0.58.1
[INFO] [stderr]    Compiling crc32fast v1.3.2
[INFO] [stderr]    Compiling poem v1.3.29
[INFO] [stderr]    Compiling rbatis-core v3.1.7
[INFO] [stderr]    Compiling strsim v0.8.0
[INFO] [stderr]    Compiling vec_map v0.8.2
[INFO] [stderr]    Compiling clap v2.34.0
[INFO] [stderr]    Compiling cexpr v0.4.0
[INFO] [stderr]    Compiling env_logger v0.8.4
[INFO] [stderr]    Compiling rbatis v3.1.6
[INFO] [stderr]    Compiling crossbeam v0.8.1
[INFO] [stderr]    Compiling chrono-tz-build v0.0.2
[INFO] [stderr]    Compiling which v3.1.1
[INFO] [stderr]    Compiling bstr v0.2.17
[INFO] [stderr]    Compiling rustc-hash v1.1.0
[INFO] [stderr]    Compiling shlex v1.1.0
[INFO] [stderr]    Compiling lazycell v1.3.0
[INFO] [stderr]    Compiling unic-char-range v0.9.0
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling peeking_take_while v0.1.2
[INFO] [stderr]    Compiling encoding_rs v0.8.31
[INFO] [stderr]    Compiling unic-common v0.9.0
[INFO] [stderr]    Compiling miniz_oxide v0.5.1
[INFO] [stderr]    Compiling unic-ucd-version v0.9.0
[INFO] [stderr]    Compiling walkdir v2.3.2
[INFO] [stderr]    Compiling globset v0.4.8
[INFO] [stderr]    Compiling unic-char-property v0.9.0
[INFO] [stderr]    Compiling chrono-tz v0.6.1
[INFO] [stderr]    Compiling fast_log v1.5.1
[INFO] [stderr]    Compiling ident_case v1.0.1
[INFO] [stderr]    Compiling flate2 v1.0.23
[INFO] [stderr]    Compiling darling_core v0.13.4
[INFO] [stderr]    Compiling crab-lib v0.1.0 (/opt/rustwide/workdir/crab-lib)
[INFO] [stderr]    Compiling crab-config v0.1.0 (/opt/rustwide/workdir/crab-config)
[INFO] [stderr]    Compiling crab-common v0.1.0 (/opt/rustwide/workdir/crab-common)
[INFO] [stderr]    Compiling unic-ucd-segment v0.9.0
[INFO] [stderr]    Compiling ignore v0.4.18
[INFO] [stderr]    Compiling crab-model v0.1.0 (/opt/rustwide/workdir/crab-model)
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 用户信息表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysUser
[INFO] [stdout] {
[INFO] [stdout]     /// 用户ID
[INFO] [stdout]     pub id : Option < i64 >, /// 用户编号
[INFO] [stdout]     #[validate(length(max = 50))] pub no : Option < String >, /// 姓名
[INFO] [stdout]     #[validate(length(max = 50))] pub name : Option < String >, /// 帐号
[INFO] [stdout]     #[validate(length(max = 30))] pub account : Option < String >, /// 密码
[INFO] [stdout]     #[validate(length(max = 100))] pub password : Option < String >,
[INFO] [stdout]     /// 邮箱
[INFO] [stdout]     #[validate(length(max = 50))] pub email : Option < String >,
[INFO] [stdout]     /// 手机号码
[INFO] [stdout]     #[validate(length(max = 11))] pub phone : Option < String >,
[INFO] [stdout]     /// 性别（0男 1女 2未知）
[INFO] [stdout]     #[validate(length(max = 1))] pub sex : Option < String >, /// 头像地址
[INFO] [stdout]     #[validate(length(max = 100))] pub avatar : Option < String >,
[INFO] [stdout]     /// 帐号状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 最后登录IP
[INFO] [stdout]     #[validate(length(max = 128))] pub login_ip : Option < String >,
[INFO] [stdout]     /// 最后登录时间
[INFO] [stdout]     pub login_at : Option < rbatis :: DateTimeNative >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysUser
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; } "no"
[INFO] [stdout]             => { return rbson :: to_bson(& self.no).unwrap_or_default() ; }
[INFO] [stdout]             "name" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.name).unwrap_or_default() ; }
[INFO] [stdout]             "account" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.account).unwrap_or_default() ; }
[INFO] [stdout]             "password" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.password).unwrap_or_default() ; }
[INFO] [stdout]             "email" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.email).unwrap_or_default() ; }
[INFO] [stdout]             "phone" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.phone).unwrap_or_default() ; }
[INFO] [stdout]             "sex" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sex).unwrap_or_default() ; }
[INFO] [stdout]             "avatar" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.avatar).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "login_ip" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.login_ip).unwrap_or_default() ; }
[INFO] [stdout]             "login_at" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.login_at).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_user".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,no,name,account,password,email,phone,sex,avatar,status,login_ip,login_at,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 菜单信息表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysMenu
[INFO] [stdout] {
[INFO] [stdout]     /// 主键ID
[INFO] [stdout]     pub id : Option < i64 >, /// 菜单编码
[INFO] [stdout]     #[validate(length(max = 500))] pub menu_code : Option < String >,
[INFO] [stdout]     /// 菜单名称
[INFO] [stdout]     #[validate(length(max = 50))] pub menu_name : Option < String >,
[INFO] [stdout]     /// 父菜单ID
[INFO] [stdout]     pub pid : Option < i64 >, /// 显示顺序
[INFO] [stdout]     pub sort : Option < i32 >, /// 路由地址
[INFO] [stdout]     #[validate(length(max = 200))] pub path : Option < String >,
[INFO] [stdout]     /// 组件路径
[INFO] [stdout]     #[validate(length(max = 255))] pub component : Option < String >,
[INFO] [stdout]     /// 是否为外链（0是 1否）
[INFO] [stdout]     pub is_frame : Option < i32 >, /// 是否缓存（0缓存 1不缓存）
[INFO] [stdout]     pub is_cache : Option < i32 >,
[INFO] [stdout]     /// 菜单类型（M目录 C菜单 F按钮）
[INFO] [stdout]     #[validate(length(max = 1))] pub menu_type : Option < String >,
[INFO] [stdout]     /// 菜单状态（0显示 1隐藏）
[INFO] [stdout]     pub visible : Option < i8 >, /// 菜单状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 权限标识
[INFO] [stdout]     #[validate(length(max = 100))] pub perms : Option < String >,
[INFO] [stdout]     /// 菜单图标
[INFO] [stdout]     #[validate(length(max = 100))] pub icon : Option < String >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 父id集合
[INFO] [stdout]     #[validate(length(max = 500))] pub parent_ids : Option < String >,
[INFO] [stdout]     /// 排序
[INFO] [stdout]     pub tree_sort : Option < i32 >, /// 排序集合
[INFO] [stdout]     #[validate(length(max = 500))] pub tree_sorts : Option < String >,
[INFO] [stdout]     /// 层级
[INFO] [stdout]     pub tree_level : Option < i32 >, /// 是否子节点（0是 1否）
[INFO] [stdout]     pub tree_leaf : Option < i8 >, /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysMenu
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "menu_code" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.menu_code).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "menu_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.menu_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "pid" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.pid).unwrap_or_default() ; }
[INFO] [stdout]             "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "path" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.path).unwrap_or_default() ; }
[INFO] [stdout]             "component" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.component).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "is_frame" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_frame).unwrap_or_default() ; }
[INFO] [stdout]             "is_cache" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_cache).unwrap_or_default() ; }
[INFO] [stdout]             "menu_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.menu_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "visible" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.visible).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "perms" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.perms).unwrap_or_default() ; }
[INFO] [stdout]             "icon" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.icon).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "parent_ids" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.parent_ids).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tree_sort" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.tree_sort).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tree_sorts" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.tree_sorts).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tree_level" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.tree_level).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tree_leaf" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.tree_leaf).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_menu".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,menu_code,menu_name,pid,sort,path,component,is_frame,is_cache,menu_type,visible,status,perms,icon,remark,parent_ids,tree_sort,tree_sorts,tree_level,tree_leaf,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stderr]    Compiling deunicode v0.4.3
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 模板配置表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct GenConfigTemplate
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 模板名称
[INFO] [stdout]     #[validate(length(max = 50))] pub template_name : Option < String >,
[INFO] [stdout]     /// 作者
[INFO] [stdout]     #[validate(length(max = 100))] pub function_author : Option < String >,
[INFO] [stdout]     /// 邮箱
[INFO] [stdout]     #[validate(length(max = 100))] pub function_author_email : Option < String
[INFO] [stdout]     >, /// 工作空间路径
[INFO] [stdout]     #[validate(length(max = 200))] pub workspace_path : Option < String >,
[INFO] [stdout]     /// 模块名
[INFO] [stdout]     #[validate(length(max = 30))] pub module_name : Option < String >,
[INFO] [stdout]     /// 模块包路径
[INFO] [stdout]     #[validate(length(max = 100))] pub package_name : Option < String >,
[INFO] [stdout]     /// 前端工作空间路径
[INFO] [stdout]     #[validate(length(max = 200))] pub web_workspace_path : Option < String >,
[INFO] [stdout]     /// 是否默认
[INFO] [stdout]     #[validate(length(max = 10))] pub template_default : Option < String >,
[INFO] [stdout]     /// 排序
[INFO] [stdout]     pub sort : Option < i32 >, /// 状态（0正常 1 停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for GenConfigTemplate
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "template_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.template_name).unwrap_or_default() ;
[INFO] [stdout]             } "function_author" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_author).unwrap_or_default() ;
[INFO] [stdout]             } "function_author_email" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_author_email).unwrap_or_default() ;
[INFO] [stdout]             } "workspace_path" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.workspace_path).unwrap_or_default() ;
[INFO] [stdout]             } "module_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.module_name).unwrap_or_default() ;
[INFO] [stdout]             } "package_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.package_name).unwrap_or_default() ;
[INFO] [stdout]             } "web_workspace_path" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.web_workspace_path).unwrap_or_default() ;
[INFO] [stdout]             } "template_default" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.template_default).unwrap_or_default() ;
[INFO] [stdout]             } "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "gen_config_template".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,template_name,function_author,function_author_email,workspace_path,module_name,package_name,web_workspace_path,template_default,sort,status,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 代码生成业务表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct GenTable
[INFO] [stdout] {
[INFO] [stdout]     /// 编号
[INFO] [stdout]     pub id : Option < i64 >, /// 表名称
[INFO] [stdout]     #[validate(length(max = 200))] pub table_name : Option < String >,
[INFO] [stdout]     /// 表描述
[INFO] [stdout]     #[validate(length(max = 500))] pub table_comment : Option < String >,
[INFO] [stdout]     /// 关联子表的表名
[INFO] [stdout]     #[validate(length(max = 64))] pub sub_table_name : Option < String >,
[INFO] [stdout]     /// 子表关联的外键名
[INFO] [stdout]     #[validate(length(max = 64))] pub sub_table_fk_name : Option < String >,
[INFO] [stdout]     /// 实体类名称
[INFO] [stdout]     #[validate(length(max = 100))] pub class_name : Option < String >,
[INFO] [stdout]     /// 使用的模板（crud单表操作 tree树表操作）
[INFO] [stdout]     #[validate(length(max = 200))] pub tpl_category : Option < String >,
[INFO] [stdout]     /// 工作空间
[INFO] [stdout]     #[validate(length(max = 200))] pub workspace_path : Option < String >,
[INFO] [stdout]     /// 模块名
[INFO] [stdout]     #[validate(length(max = 30))] pub module_name : Option < String >,
[INFO] [stdout]     /// 包路径
[INFO] [stdout]     #[validate(length(max = 100))] pub package_name : Option < String >,
[INFO] [stdout]     /// 业务名
[INFO] [stdout]     #[validate(length(max = 30))] pub business_name : Option < String >,
[INFO] [stdout]     /// 功能名
[INFO] [stdout]     #[validate(length(max = 50))] pub function_name : Option < String >,
[INFO] [stdout]     /// 作者
[INFO] [stdout]     #[validate(length(max = 50))] pub function_author : Option < String >,
[INFO] [stdout]     /// 邮箱
[INFO] [stdout]     #[validate(length(max = 200))] pub function_author_email : Option < String
[INFO] [stdout]     >, /// 前端工作空间路径
[INFO] [stdout]     #[validate(length(max = 200))] pub web_workspace_path : Option < String >,
[INFO] [stdout]     /// 生成代码方式（0zip压缩包 1自定义路径）
[INFO] [stdout]     pub gen_type : Option < i8 >, /// 扩展选项
[INFO] [stdout]     #[validate(length(max = 4000))] pub options : Option < String >,
[INFO] [stdout]     /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for GenTable
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "table_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.table_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "table_comment" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.table_comment).unwrap_or_default() ;
[INFO] [stdout]             } "sub_table_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.sub_table_name).unwrap_or_default() ;
[INFO] [stdout]             } "sub_table_fk_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.sub_table_fk_name).unwrap_or_default() ;
[INFO] [stdout]             } "class_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.class_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tpl_category" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.tpl_category).unwrap_or_default() ;
[INFO] [stdout]             } "workspace_path" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.workspace_path).unwrap_or_default() ;
[INFO] [stdout]             } "module_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.module_name).unwrap_or_default() ;
[INFO] [stdout]             } "package_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.package_name).unwrap_or_default() ;
[INFO] [stdout]             } "business_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.business_name).unwrap_or_default() ;
[INFO] [stdout]             } "function_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_name).unwrap_or_default() ;
[INFO] [stdout]             } "function_author" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_author).unwrap_or_default() ;
[INFO] [stdout]             } "function_author_email" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_author_email).unwrap_or_default() ;
[INFO] [stdout]             } "web_workspace_path" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.web_workspace_path).unwrap_or_default() ;
[INFO] [stdout]             } "gen_type" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.gen_type).unwrap_or_default() ; }
[INFO] [stdout]             "options" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.options).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "gen_table".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,table_name,table_comment,sub_table_name,sub_table_fk_name,class_name,tpl_category,workspace_path,module_name,package_name,business_name,function_name,function_author,function_author_email,web_workspace_path,gen_type,options,remark,create_by,create_at,update_by,update_at".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 代码生成业务表字段
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct GenTableColumn
[INFO] [stdout] {
[INFO] [stdout]     /// 编号
[INFO] [stdout]     pub id : Option < i64 >, /// 归属表编号
[INFO] [stdout]     #[validate(length(max = 64))] pub table_id : Option < String >,
[INFO] [stdout]     /// 列名称
[INFO] [stdout]     #[validate(length(max = 200))] pub column_name : Option < String >,
[INFO] [stdout]     /// 列描述
[INFO] [stdout]     #[validate(length(max = 500))] pub column_comment : Option < String >,
[INFO] [stdout]     /// 列类型
[INFO] [stdout]     #[validate(length(max = 100))] pub column_type : Option < String >,
[INFO] [stdout]     /// JAVA类型
[INFO] [stdout]     #[validate(length(max = 500))] pub java_type : Option < String >,
[INFO] [stdout]     /// JAVA字段名
[INFO] [stdout]     #[validate(length(max = 200))] pub java_field : Option < String >,
[INFO] [stdout]     /// 是否主键（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_pk : Option < String >,
[INFO] [stdout]     /// 是否自增（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_increment : Option < String >,
[INFO] [stdout]     /// 是否必填（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_required : Option < String >,
[INFO] [stdout]     /// 是否为插入字段（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_insert : Option < String >,
[INFO] [stdout]     /// 是否编辑字段（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_edit : Option < String >,
[INFO] [stdout]     /// 是否列表字段（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_list : Option < String >,
[INFO] [stdout]     /// 是否查询字段（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_query : Option < String >,
[INFO] [stdout]     /// 是否唯一性
[INFO] [stdout]     #[validate(length(max = 10))] pub is_unique : Option < String >,
[INFO] [stdout]     /// 是否记录日志
[INFO] [stdout]     #[validate(length(max = 10))] pub is_log : Option < String >,
[INFO] [stdout]     /// 是否排序
[INFO] [stdout]     #[validate(length(max = 10))] pub is_column_sort : Option < String >,
[INFO] [stdout]     /// 新行
[INFO] [stdout]     #[validate(length(max = 10))] pub is_new_row : Option < String >,
[INFO] [stdout]     /// 列数
[INFO] [stdout]     pub col_span : Option < i32 >, /// 对齐方式
[INFO] [stdout]     #[validate(length(max = 10))] pub align_type : Option < String >,
[INFO] [stdout]     /// 查询方式（等于、不等于、大于、小于、范围）
[INFO] [stdout]     #[validate(length(max = 200))] pub query_type : Option < String >,
[INFO] [stdout]     /// 显示类型（文本框、文本域、下拉框、复选框、单选框、日期控件）
[INFO] [stdout]     #[validate(length(max = 200))] pub html_type : Option < String >,
[INFO] [stdout]     /// 字典类型
[INFO] [stdout]     #[validate(length(max = 200))] pub dict_type : Option < String >,
[INFO] [stdout]     /// 字段校验
[INFO] [stdout]     #[validate(length(max = 100))] pub col_check : Option < String >,
[INFO] [stdout]     /// 排序
[INFO] [stdout]     pub sort : Option < i32 >, /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for GenTableColumn
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "table_id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.table_id).unwrap_or_default() ; }
[INFO] [stdout]             "column_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.column_name).unwrap_or_default() ;
[INFO] [stdout]             } "column_comment" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.column_comment).unwrap_or_default() ;
[INFO] [stdout]             } "column_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.column_type).unwrap_or_default() ;
[INFO] [stdout]             } "java_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.java_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "java_field" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.java_field).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "is_pk" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_pk).unwrap_or_default() ; }
[INFO] [stdout]             "is_increment" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.is_increment).unwrap_or_default() ;
[INFO] [stdout]             } "is_required" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.is_required).unwrap_or_default() ;
[INFO] [stdout]             } "is_insert" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.is_insert).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "is_edit" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_edit).unwrap_or_default() ; }
[INFO] [stdout]             "is_list" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_list).unwrap_or_default() ; }
[INFO] [stdout]             "is_query" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_query).unwrap_or_default() ; }
[INFO] [stdout]             "is_unique" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.is_unique).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "is_log" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_log).unwrap_or_default() ; }
[INFO] [stdout]             "is_column_sort" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.is_column_sort).unwrap_or_default() ;
[INFO] [stdout]             } "is_new_row" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.is_new_row).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "col_span" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.col_span).unwrap_or_default() ; }
[INFO] [stdout]             "align_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.align_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "query_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.query_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "html_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.html_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "dict_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.dict_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "col_check" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.col_check).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "gen_table_column".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,table_id,column_name,column_comment,column_type,java_type,java_field,is_pk,is_increment,is_required,is_insert,is_edit,is_list,is_query,is_unique,is_log,is_column_sort,is_new_row,col_span,align_type,query_type,html_type,dict_type,col_check,sort,create_by,create_at,update_by,update_at".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stderr]    Compiling os_str_bytes v6.0.0
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 参数配置表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysConfig
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 参数名称
[INFO] [stdout]     #[validate(length(max = 100))] pub config_name : Option < String >,
[INFO] [stdout]     /// 参数键名
[INFO] [stdout]     #[validate(length(max = 100))] pub config_key : Option < String >,
[INFO] [stdout]     /// 参数键值
[INFO] [stdout]     #[validate(length(max = 500))] pub config_value : Option < String >,
[INFO] [stdout]     /// 系统内置（0否 1是）
[INFO] [stdout]     pub config_type : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysConfig
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "config_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.config_name).unwrap_or_default() ;
[INFO] [stdout]             } "config_key" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.config_key).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "config_value" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.config_value).unwrap_or_default() ;
[INFO] [stdout]             } "config_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.config_type).unwrap_or_default() ;
[INFO] [stdout]             } "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_config".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,config_name,config_key,config_value,config_type,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 系统访问记录
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysLoginLog
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 用户账号
[INFO] [stdout]     #[validate(length(max = 50))] pub account : Option < String >,
[INFO] [stdout]     /// 登录IP地址
[INFO] [stdout]     #[validate(length(max = 128))] pub ip : Option < String >,
[INFO] [stdout]     /// 登录地点
[INFO] [stdout]     #[validate(length(max = 255))] pub login_location : Option < String >,
[INFO] [stdout]     /// 浏览器类型
[INFO] [stdout]     #[validate(length(max = 50))] pub browser : Option < String >,
[INFO] [stdout]     /// 操作系统
[INFO] [stdout]     #[validate(length(max = 50))] pub os : Option < String >,
[INFO] [stdout]     /// 登录状态（0成功 1失败）
[INFO] [stdout]     pub status : Option < i8 >, /// 提示消息
[INFO] [stdout]     #[validate(length(max = 255))] pub msg : Option < String >,
[INFO] [stdout]     /// 访问时间
[INFO] [stdout]     pub login_at : Option < rbatis :: DateTimeNative >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysLoginLog
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "account" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.account).unwrap_or_default() ; }
[INFO] [stdout]             "ip" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.ip).unwrap_or_default() ; }
[INFO] [stdout]             "login_location" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.login_location).unwrap_or_default() ;
[INFO] [stdout]             } "browser" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.browser).unwrap_or_default() ; }
[INFO] [stdout]             "os" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.os).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "msg" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.msg).unwrap_or_default() ; }
[INFO] [stdout]             "login_at" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.login_at).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_login_log".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,account,ip,login_location,browser,os,status,msg,login_at,remark,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 字典类型表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysDictType
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 字典名称
[INFO] [stdout]     #[validate(length(max = 100))] pub name : Option < String >,
[INFO] [stdout]     /// 字典类型
[INFO] [stdout]     #[validate(length(max = 100))] pub r#type : Option < String >,
[INFO] [stdout]     /// 状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysDictType
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "name" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.name).unwrap_or_default() ; }
[INFO] [stdout]             "r#type" | "type" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.r#type).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_dict_type".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,name,type,status,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 字典数据表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysDictData
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 字典类型
[INFO] [stdout]     #[validate(length(max = 100))] pub dict_type : Option < String >,
[INFO] [stdout]     /// 字典编码
[INFO] [stdout]     pub code : Option < i64 >, /// 字典标签
[INFO] [stdout]     #[validate(length(max = 100))] pub label : Option < String >,
[INFO] [stdout]     /// 字典键值
[INFO] [stdout]     #[validate(length(max = 100))] pub value : Option < String >,
[INFO] [stdout]     /// 是否默认（1是 0否）
[INFO] [stdout]     pub is_default : Option < i8 >, /// 字典排序
[INFO] [stdout]     pub sort : Option < i16 >, /// 样式属性（其他样式扩展）
[INFO] [stdout]     #[validate(length(max = 100))] pub css_class : Option < String >,
[INFO] [stdout]     /// 表格回显样式
[INFO] [stdout]     #[validate(length(max = 100))] pub table_class : Option < String >,
[INFO] [stdout]     /// 状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysDictData
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "dict_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.dict_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "code" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.code).unwrap_or_default() ; }
[INFO] [stdout]             "label" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.label).unwrap_or_default() ; }
[INFO] [stdout]             "value" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.value).unwrap_or_default() ; }
[INFO] [stdout]             "is_default" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.is_default).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "css_class" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.css_class).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "table_class" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.table_class).unwrap_or_default() ;
[INFO] [stdout]             } "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_dict_data".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,dict_type,code,label,value,is_default,sort,css_class,table_class,status,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 用户和角色关联表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysUserRole
[INFO] [stdout] {
[INFO] [stdout]     /// 用户ID
[INFO] [stdout]     pub user_id : Option < i64 >, /// 角色ID
[INFO] [stdout]     pub role_id : Option < i64 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysUserRole
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "user_id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.user_id).unwrap_or_default() ; }
[INFO] [stdout]             "role_id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.role_id).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_user_role".to_string() } fn
[INFO] [stdout]     table_columns() -> String { "user_id,role_id".to_string() } fn
[INFO] [stdout]     formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 角色信息表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysRole
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 角色名称
[INFO] [stdout]     #[validate(length(max = 30))] pub role_name : Option < String >,
[INFO] [stdout]     /// 角色权限字符串
[INFO] [stdout]     #[validate(length(max = 100))] pub role_key : Option < String >,
[INFO] [stdout]     /// 显示顺序
[INFO] [stdout]     pub sort : Option < i32 >,
[INFO] [stdout]     /// 数据范围（1：全部数据权限 2：自定数据权限 ）
[INFO] [stdout]     pub data_scope : Option < i8 >, /// 菜单树选择项是否关联显示
[INFO] [stdout]     pub menu_check_strictly : Option < i8 >,
[INFO] [stdout]     /// 角色状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysRole
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "role_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.role_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "role_key" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.role_key).unwrap_or_default() ; }
[INFO] [stdout]             "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "data_scope" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.data_scope).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "menu_check_strictly" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.menu_check_strictly).unwrap_or_default() ;
[INFO] [stdout]             } "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_role".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,role_name,role_key,sort,data_scope,menu_check_strictly,status,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 操作日志记录
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysLog
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 模块标题
[INFO] [stdout]     #[validate(length(max = 50))] pub title : Option < String >,
[INFO] [stdout]     /// 业务类型（0其它 1新增 2修改 3删除）
[INFO] [stdout]     pub business_type : Option < i8 >, /// 方法名称
[INFO] [stdout]     #[validate(length(max = 100))] pub method : Option < String >,
[INFO] [stdout]     /// 请求方式
[INFO] [stdout]     #[validate(length(max = 10))] pub request_method : Option < String >,
[INFO] [stdout]     /// 操作类别（0其它 1后台用户 2手机端用户）
[INFO] [stdout]     pub operator_type : Option < i8 >, /// 操作人员
[INFO] [stdout]     #[validate(length(max = 50))] pub oper_name : Option < String >,
[INFO] [stdout]     /// 请求URL
[INFO] [stdout]     #[validate(length(max = 255))] pub oper_url : Option < String >,
[INFO] [stdout]     /// 主机地址
[INFO] [stdout]     #[validate(length(max = 128))] pub oper_ip : Option < String >,
[INFO] [stdout]     /// 操作地点
[INFO] [stdout]     #[validate(length(max = 255))] pub oper_location : Option < String >,
[INFO] [stdout]     /// 请求参数
[INFO] [stdout]     #[validate(length(max = 2000))] pub oper_param : Option < String >,
[INFO] [stdout]     /// 返回结果集
[INFO] [stdout]     #[validate(length(max = 65535))] pub json_result : Option < String >,
[INFO] [stdout]     /// 日志变更内容
[INFO] [stdout]     #[validate(length(max = 65535))] pub log_content : Option < String >,
[INFO] [stdout]     /// 操作状态（0正常 1异常）
[INFO] [stdout]     pub status : Option < i8 >, /// 错误消息
[INFO] [stdout]     #[validate(length(max = 2000))] pub error_msg : Option < String >,
[INFO] [stdout]     /// 操作时间
[INFO] [stdout]     pub oper_time : Option < rbatis :: DateTimeNative >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >, /// 耗时
[INFO] [stdout]     pub take_up_time : Option < i32 >, /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysLog
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "title" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.title).unwrap_or_default() ; }
[INFO] [stdout]             "business_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.business_type).unwrap_or_default() ;
[INFO] [stdout]             } "method" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.method).unwrap_or_default() ; }
[INFO] [stdout]             "request_method" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.request_method).unwrap_or_default() ;
[INFO] [stdout]             } "operator_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.operator_type).unwrap_or_default() ;
[INFO] [stdout]             } "oper_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.oper_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "oper_url" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.oper_url).unwrap_or_default() ; }
[INFO] [stdout]             "oper_ip" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.oper_ip).unwrap_or_default() ; }
[INFO] [stdout]             "oper_location" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.oper_location).unwrap_or_default() ;
[INFO] [stdout]             } "oper_param" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.oper_param).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "json_result" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.json_result).unwrap_or_default() ;
[INFO] [stdout]             } "log_content" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.log_content).unwrap_or_default() ;
[INFO] [stdout]             } "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "error_msg" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.error_msg).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "oper_time" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.oper_time).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "take_up_time" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.take_up_time).unwrap_or_default() ;
[INFO] [stdout]             } "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_log".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,title,business_type,method,request_method,operator_type,oper_name,oper_url,oper_ip,oper_location,oper_param,json_result,log_content,status,error_msg,oper_time,remark,take_up_time,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stderr]    Compiling heck v0.4.0
[INFO] [stderr]    Compiling clap_lex v0.2.0
[INFO] [stderr]    Compiling clap_derive v3.1.18
[INFO] [stderr]    Compiling globwalk v0.8.1
[INFO] [stderr]    Compiling darling_macro v0.13.4
[INFO] [stderr]    Compiling slug v0.1.4
[INFO] [stderr]    Compiling unic-segment v0.9.0
[INFO] [stderr]    Compiling zip v0.5.13
[INFO] [stderr]    Compiling tracing-log v0.1.3
[INFO] [stderr]    Compiling sharded-slab v0.1.4
[INFO] [stderr]    Compiling textwrap v0.15.0
[INFO] [stderr]    Compiling crab-util v0.1.0 (/opt/rustwide/workdir/crab-util)
[INFO] [stderr]    Compiling humansize v1.1.1
[INFO] [stderr]    Compiling tracing-subscriber v0.3.11
[INFO] [stderr]    Compiling darling v0.13.4
[INFO] [stderr]    Compiling codepage v0.1.1
[INFO] [stderr]    Compiling quick-xml v0.19.0
[INFO] [stderr]    Compiling crab-excel-derive v0.1.0 (/opt/rustwide/workdir/crab-excel-derive)
[INFO] [stderr]    Compiling simple_excel_writer v0.1.9
[INFO] [stderr]    Compiling clap v3.1.18
[INFO] [stderr]    Compiling calamine v0.18.0
[INFO] [stderr]    Compiling libxlsxwriter-sys v1.1.1
[INFO] [stderr]    Compiling tera v1.15.0
[INFO] [stderr]    Compiling crab-cache v0.1.0 (/opt/rustwide/workdir/crab-cache)
[INFO] [stderr]    Compiling generator v0.2.0 (/opt/rustwide/workdir/generator)
[INFO] [stdout] ............gen macro py_sql :
[INFO] [stdout]  pub async fn tables(table_names : & str) -> rbatis :: core :: Result < Vec <
[INFO] [stdout] Table > >
[INFO] [stdout] {
[INFO] [stdout]     let mut sql =
[INFO] [stdout]     "
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         TABLE_TYPE,
[INFO] [stdout]         `ENGINE`,
[INFO] [stdout]         VERSION,
[INFO] [stdout]         ROW_FORMAT,
[INFO] [stdout]         TABLE_ROWS,
[INFO] [stdout]         AVG_ROW_LENGTH,
[INFO] [stdout]         DATA_LENGTH,
[INFO] [stdout]         MAX_DATA_LENGTH,
[INFO] [stdout]         INDEX_LENGTH,
[INFO] [stdout]         DATA_FREE,
[INFO] [stdout]         AUTO_INCREMENT,
[INFO] [stdout]         CREATE_TIME,
[INFO] [stdout]         UPDATE_TIME,
[INFO] [stdout]         CHECK_TIME,
[INFO] [stdout]         TABLE_COLLATION,
[INFO] [stdout]         `CHECKSUM`,
[INFO] [stdout]         CREATE_OPTIONS,
[INFO] [stdout]         TABLE_COMMENT
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.`TABLES`
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         CREATE_TIME;
[INFO] [stdout]     ".to_string()
[INFO] [stdout]     ; let mut rb_arg_map = rbson :: Document :: new() ;
[INFO] [stdout]     rb_arg_map.insert("table_names".to_string(), rbson ::
[INFO] [stdout]     to_bson(table_names).unwrap_or_default()) ; {} use rbatis :: executor ::
[INFO] [stdout]     { RbatisRef } ; let driver_type = RB.get_rbatis().driver_type() ? ; use
[INFO] [stdout]     rbatis :: { rbatis_sql, AsSqlTag } ; let sql_tag = driver_type.sql_tag() ;
[INFO] [stdout]     #[rb_py("
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         TABLE_TYPE,
[INFO] [stdout]         `ENGINE`,
[INFO] [stdout]         VERSION,
[INFO] [stdout]         ROW_FORMAT,
[INFO] [stdout]         TABLE_ROWS,
[INFO] [stdout]         AVG_ROW_LENGTH,
[INFO] [stdout]         DATA_LENGTH,
[INFO] [stdout]         MAX_DATA_LENGTH,
[INFO] [stdout]         INDEX_LENGTH,
[INFO] [stdout]         DATA_FREE,
[INFO] [stdout]         AUTO_INCREMENT,
[INFO] [stdout]         CREATE_TIME,
[INFO] [stdout]         UPDATE_TIME,
[INFO] [stdout]         CHECK_TIME,
[INFO] [stdout]         TABLE_COLLATION,
[INFO] [stdout]         `CHECKSUM`,
[INFO] [stdout]         CREATE_OPTIONS,
[INFO] [stdout]         TABLE_COMMENT
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.`TABLES`
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         CREATE_TIME;
[INFO] [stdout]     ")]
[INFO] [stdout]     pub fn tables(arg : & rbson :: Bson, _tag : char) {} let(mut sql, rb_args)
[INFO] [stdout]     = tables(& rbson :: Bson :: Document(rb_arg_map), sql_tag) ;
[INFO] [stdout]     driver_type.do_replace_tag(& mut sql) ; use rbatis :: executor ::
[INFO] [stdout]     { Executor, ExecutorMut } ; RB.fetch(& sql, rb_args).await
[INFO] [stdout] }
[INFO] [stdout] ............gen macro py_sql end............
[INFO] [stdout] py_sql:
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         TABLE_TYPE,
[INFO] [stdout]         `ENGINE`,
[INFO] [stdout]         VERSION,
[INFO] [stdout]         ROW_FORMAT,
[INFO] [stdout]         TABLE_ROWS,
[INFO] [stdout]         AVG_ROW_LENGTH,
[INFO] [stdout]         DATA_LENGTH,
[INFO] [stdout]         MAX_DATA_LENGTH,
[INFO] [stdout]         INDEX_LENGTH,
[INFO] [stdout]         DATA_FREE,
[INFO] [stdout]         AUTO_INCREMENT,
[INFO] [stdout]         CREATE_TIME,
[INFO] [stdout]         UPDATE_TIME,
[INFO] [stdout]         CHECK_TIME,
[INFO] [stdout]         TABLE_COLLATION,
[INFO] [stdout]         `CHECKSUM`,
[INFO] [stdout]         CREATE_OPTIONS,
[INFO] [stdout]         TABLE_COMMENT
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.`TABLES`
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         CREATE_TIME;
[INFO] [stdout]     
[INFO] [stdout] html:<mapper><update id="tables"> SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = ( SELECT DATABASE ())<if test="table_names != ''"> AND FIND_IN_SET(TABLE_NAME, #{table_names})</if> ORDER BY CREATE_TIME; </update></mapper>
[INFO] [stdout] load html:[
[INFO] [stdout]      {
[INFO] [stdout]         tag: "update",
[INFO] [stdout]         attributes: {
[INFO] [stdout]             "id": "tables",
[INFO] [stdout]         },
[INFO] [stdout]         childs: [
[INFO] [stdout]              {
[INFO] [stdout]                 data: "SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = ( SELECT DATABASE ())",
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 tag: "if",
[INFO] [stdout]                 attributes: {
[INFO] [stdout]                     "test": "table_names != ''",
[INFO] [stdout]                 },
[INFO] [stdout]                 childs: [
[INFO] [stdout]                      {
[INFO] [stdout]                         data: "AND FIND_IN_SET(TABLE_NAME, #{table_names})",
[INFO] [stdout]                     },
[INFO] [stdout]                 ],
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 data: "ORDER BY CREATE_TIME;",
[INFO] [stdout]             },
[INFO] [stdout]         ],
[INFO] [stdout]     },
[INFO] [stdout] ]
[INFO] [stdout] ............gen rb_pysql_fn:
[INFO] [stdout]  use rbatis_sql :: ops :: * ; pub fn tables(arg : & rbson :: Bson, _tag : char)
[INFO] [stdout] -> (String, Vec < rbson :: Bson >)
[INFO] [stdout] {
[INFO] [stdout]     use rbatis_sql :: ops :: AsProxy ; let mut sql = String ::
[INFO] [stdout]     with_capacity(1000) ; let mut args = Vec :: with_capacity(20) ;
[INFO] [stdout]     sql.push_str("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = ( SELECT DATABASE ())")
[INFO] [stdout]     ; let dGFibGVfbmFtZXMgIT0gJyc_ =
[INFO] [stdout]     { let result = { (arg.index("table_names")).op_ne(& "") } ; result } ; if
[INFO] [stdout]     dGFibGVfbmFtZXMgIT0gJyc_
[INFO] [stdout]     {
[INFO] [stdout]         sql.push_str(" ") ; let c2VsZWN0OnRhYmxlX25hbWVz =
[INFO] [stdout]         { let result = { arg.index("table_names") } ; result } ;
[INFO] [stdout]         args.push(rbson :: bson! (c2VsZWN0OnRhYmxlX25hbWVz)) ;
[INFO] [stdout]         sql.push_str("AND FIND_IN_SET(TABLE_NAME, ?)") ;
[INFO] [stdout]     } sql.push_str("ORDER BY CREATE_TIME;") ; rbatis_sql :: sql_index!
[INFO] [stdout]     (sql, _tag) ; return(sql, args) ;
[INFO] [stdout] }
[INFO] [stdout] ............gen rb_pysql_fn end............
[INFO] [stdout] ............gen macro py_sql :
[INFO] [stdout]  pub async fn columns(table_names : & str) -> rbatis :: core :: Result < Vec <
[INFO] [stdout] TableColumn > >
[INFO] [stdout] {
[INFO] [stdout]     let mut sql =
[INFO] [stdout]     "
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         COLUMN_NAME,
[INFO] [stdout]         ORDINAL_POSITION,
[INFO] [stdout]         COLUMN_DEFAULT,
[INFO] [stdout]         IS_NULLABLE,
[INFO] [stdout]         DATA_TYPE,
[INFO] [stdout]         CHARACTER_MAXIMUM_LENGTH,
[INFO] [stdout]         CHARACTER_OCTET_LENGTH,
[INFO] [stdout]         NUMERIC_PRECISION,
[INFO] [stdout]         NUMERIC_SCALE,
[INFO] [stdout]         DATETIME_PRECISION,
[INFO] [stdout]         CHARACTER_SET_NAME,
[INFO] [stdout]         COLLATION_NAME,
[INFO] [stdout]         COLUMN_TYPE,
[INFO] [stdout]         COLUMN_KEY,
[INFO] [stdout]         EXTRA,
[INFO] [stdout]         `PRIVILEGES`,
[INFO] [stdout]         COLUMN_COMMENT,
[INFO] [stdout]         GENERATION_EXPRESSION,
[INFO] [stdout]         SRS_ID
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.COLUMNS
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         ORDINAL_POSITION;
[INFO] [stdout]     ".to_string()
[INFO] [stdout]     ; let mut rb_arg_map = rbson :: Document :: new() ;
[INFO] [stdout]     rb_arg_map.insert("table_names".to_string(), rbson ::
[INFO] [stdout]     to_bson(table_names).unwrap_or_default()) ; {} use rbatis :: executor ::
[INFO] [stdout]     { RbatisRef } ; let driver_type = RB.get_rbatis().driver_type() ? ; use
[INFO] [stdout]     rbatis :: { rbatis_sql, AsSqlTag } ; let sql_tag = driver_type.sql_tag() ;
[INFO] [stdout]     #[rb_py("
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         COLUMN_NAME,
[INFO] [stdout]         ORDINAL_POSITION,
[INFO] [stdout]         COLUMN_DEFAULT,
[INFO] [stdout]         IS_NULLABLE,
[INFO] [stdout]         DATA_TYPE,
[INFO] [stdout]         CHARACTER_MAXIMUM_LENGTH,
[INFO] [stdout]         CHARACTER_OCTET_LENGTH,
[INFO] [stdout]         NUMERIC_PRECISION,
[INFO] [stdout]         NUMERIC_SCALE,
[INFO] [stdout]         DATETIME_PRECISION,
[INFO] [stdout]         CHARACTER_SET_NAME,
[INFO] [stdout]         COLLATION_NAME,
[INFO] [stdout]         COLUMN_TYPE,
[INFO] [stdout]         COLUMN_KEY,
[INFO] [stdout]         EXTRA,
[INFO] [stdout]         `PRIVILEGES`,
[INFO] [stdout]         COLUMN_COMMENT,
[INFO] [stdout]         GENERATION_EXPRESSION,
[INFO] [stdout]         SRS_ID
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.COLUMNS
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         ORDINAL_POSITION;
[INFO] [stdout]     ")]
[INFO] [stdout]     pub fn columns(arg : & rbson :: Bson, _tag : char) {}
[INFO] [stdout]     let(mut sql, rb_args) =
[INFO] [stdout]     columns(& rbson :: Bson :: Document(rb_arg_map), sql_tag) ;
[INFO] [stdout]     driver_type.do_replace_tag(& mut sql) ; use rbatis :: executor ::
[INFO] [stdout]     { Executor, ExecutorMut } ; RB.fetch(& sql, rb_args).await
[INFO] [stdout] }
[INFO] [stdout] ............gen macro py_sql end............
[INFO] [stdout] py_sql:
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         COLUMN_NAME,
[INFO] [stdout]         ORDINAL_POSITION,
[INFO] [stdout]         COLUMN_DEFAULT,
[INFO] [stdout]         IS_NULLABLE,
[INFO] [stdout]         DATA_TYPE,
[INFO] [stdout]         CHARACTER_MAXIMUM_LENGTH,
[INFO] [stdout]         CHARACTER_OCTET_LENGTH,
[INFO] [stdout]         NUMERIC_PRECISION,
[INFO] [stdout]         NUMERIC_SCALE,
[INFO] [stdout]         DATETIME_PRECISION,
[INFO] [stdout]         CHARACTER_SET_NAME,
[INFO] [stdout]         COLLATION_NAME,
[INFO] [stdout]         COLUMN_TYPE,
[INFO] [stdout]         COLUMN_KEY,
[INFO] [stdout]         EXTRA,
[INFO] [stdout]         `PRIVILEGES`,
[INFO] [stdout]         COLUMN_COMMENT,
[INFO] [stdout]         GENERATION_EXPRESSION,
[INFO] [stdout]         SRS_ID
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.COLUMNS
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         ORDINAL_POSITION;
[INFO] [stdout]     
[INFO] [stdout] html:<mapper><update id="columns"> SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ( SELECT DATABASE ())<if test="table_names != ''"> AND FIND_IN_SET(TABLE_NAME, #{table_names})</if> ORDER BY ORDINAL_POSITION; </update></mapper>
[INFO] [stdout] load html:[
[INFO] [stdout]      {
[INFO] [stdout]         tag: "update",
[INFO] [stdout]         attributes: {
[INFO] [stdout]             "id": "columns",
[INFO] [stdout]         },
[INFO] [stdout]         childs: [
[INFO] [stdout]              {
[INFO] [stdout]                 data: "SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ( SELECT DATABASE ())",
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 tag: "if",
[INFO] [stdout]                 attributes: {
[INFO] [stdout]                     "test": "table_names != ''",
[INFO] [stdout]                 },
[INFO] [stdout]                 childs: [
[INFO] [stdout]                      {
[INFO] [stdout]                         data: "AND FIND_IN_SET(TABLE_NAME, #{table_names})",
[INFO] [stdout]                     },
[INFO] [stdout]                 ],
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 data: "ORDER BY ORDINAL_POSITION;",
[INFO] [stdout]             },
[INFO] [stdout]         ],
[INFO] [stdout]     },
[INFO] [stdout] ]
[INFO] [stdout] ............gen rb_pysql_fn:
[INFO] [stdout]  use rbatis_sql :: ops :: * ; pub fn
[INFO] [stdout] columns(arg : & rbson :: Bson, _tag : char) -> (String, Vec < rbson :: Bson >)
[INFO] [stdout] {
[INFO] [stdout]     use rbatis_sql :: ops :: AsProxy ; let mut sql = String ::
[INFO] [stdout]     with_capacity(1000) ; let mut args = Vec :: with_capacity(20) ;
[INFO] [stdout]     sql.push_str("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ( SELECT DATABASE ())")
[INFO] [stdout]     ; let dGFibGVfbmFtZXMgIT0gJyc_ =
[INFO] [stdout]     { let result = { (arg.index("table_names")).op_ne(& "") } ; result } ; if
[INFO] [stdout]     dGFibGVfbmFtZXMgIT0gJyc_
[INFO] [stdout]     {
[INFO] [stdout]         sql.push_str(" ") ; let c2VsZWN0OnRhYmxlX25hbWVz =
[INFO] [stdout]         { let result = { arg.index("table_names") } ; result } ;
[INFO] [stdout]         args.push(rbson :: bson! (c2VsZWN0OnRhYmxlX25hbWVz)) ;
[INFO] [stdout]         sql.push_str("AND FIND_IN_SET(TABLE_NAME, ?)") ;
[INFO] [stdout]     } sql.push_str("ORDER BY ORDINAL_POSITION;") ; rbatis_sql :: sql_index!
[INFO] [stdout]     (sql, _tag) ; return(sql, args) ;
[INFO] [stdout] }
[INFO] [stdout] ............gen rb_pysql_fn end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 表信息来自 sqlite_master
[INFO] [stdout] #[derive(Serialize, Deserialize, Default, Debug)]
[INFO] [stdout] #[serde(rename_all(deserialize = "SCREAMING_SNAKE_CASE"))] pub struct Table
[INFO] [stdout] {
[INFO] [stdout]     /// 项目的类型：table，index，view，trigger
[INFO] [stdout]     r#type : Option < String >, /// 项目的名称
[INFO] [stdout]     name : Option < String >,
[INFO] [stdout]     /// 所从属的表名，如索引所在的表名
[INFO] [stdout]     tbl_name : Option < String >, /// 项目在数据库页中存储的编号
[INFO] [stdout]     rootpage : Option < i64 >, /// SQL语句
[INFO] [stdout]     sql : Option < String >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for Table
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "r#type" | "type" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.r#type).unwrap_or_default() ; }
[INFO] [stdout]             "name" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.name).unwrap_or_default() ; }
[INFO] [stdout]             "tbl_name" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.tbl_name).unwrap_or_default() ; }
[INFO] [stdout]             "rootpage" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.rootpage).unwrap_or_default() ; }
[INFO] [stdout]             "sql" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sql).unwrap_or_default() ; } _ =>
[INFO] [stdout]             { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "table".to_string() } fn table_columns() ->
[INFO] [stdout]     String { "type,name,tbl_name,rootpage,sql".to_string() } fn
[INFO] [stdout]     formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen macro py_sql :
[INFO] [stdout]  pub async fn tables(table_names : & [& str]) -> rbatis :: core :: Result < Vec
[INFO] [stdout] < Table > >
[INFO] [stdout] {
[INFO] [stdout]     let mut sql =
[INFO] [stdout]     "
[INFO] [stdout]     SELECT type, name, tbl_name, rootpage, sql
[INFO] [stdout]     FROM sqlite_master
[INFO] [stdout]     WHERE type = 'table'
[INFO] [stdout]         AND (
[INFO] [stdout]         1 = 2
[INFO] [stdout]     trim ',': for item in table_names:
[INFO] [stdout]         OR name = '#{item}'
[INFO] [stdout]         )
[INFO] [stdout]     ORDER by rootpage;
[INFO] [stdout]     ".to_string()
[INFO] [stdout]     ; let mut rb_arg_map = rbson :: Document :: new() ;
[INFO] [stdout]     rb_arg_map.insert("table_names".to_string(), rbson ::
[INFO] [stdout]     to_bson(table_names).unwrap_or_default()) ; {} use rbatis :: executor ::
[INFO] [stdout]     { RbatisRef } ; let driver_type = RB.get_rbatis().driver_type() ? ; use
[INFO] [stdout]     rbatis :: { rbatis_sql, AsSqlTag } ; let sql_tag = driver_type.sql_tag() ;
[INFO] [stdout]     #[rb_py("
[INFO] [stdout]     SELECT type, name, tbl_name, rootpage, sql
[INFO] [stdout]     FROM sqlite_master
[INFO] [stdout]     WHERE type = 'table'
[INFO] [stdout]         AND (
[INFO] [stdout]         1 = 2
[INFO] [stdout]     trim ',': for item in table_names:
[INFO] [stdout]         OR name = '#{item}'
[INFO] [stdout]         )
[INFO] [stdout]     ORDER by rootpage;
[INFO] [stdout]     ")]
[INFO] [stdout]     pub fn tables(arg : & rbson :: Bson, _tag : char) {} let(mut sql, rb_args)
[INFO] [stdout]     = tables(& rbson :: Bson :: Document(rb_arg_map), sql_tag) ;
[INFO] [stdout]     driver_type.do_replace_tag(& mut sql) ; use rbatis :: executor ::
[INFO] [stdout]     { Executor, ExecutorMut } ; RB.fetch(& sql, rb_args).await
[INFO] [stdout] }
[INFO] [stdout] ............gen macro py_sql end............
[INFO] [stdout] py_sql:
[INFO] [stdout]     SELECT type, name, tbl_name, rootpage, sql
[INFO] [stdout]     FROM sqlite_master
[INFO] [stdout]     WHERE type = 'table'
[INFO] [stdout]         AND (
[INFO] [stdout]         1 = 2
[INFO] [stdout]     trim ',': for item in table_names:
[INFO] [stdout]         OR name = '#{item}'
[INFO] [stdout]         )
[INFO] [stdout]     ORDER by rootpage;
[INFO] [stdout]     
[INFO] [stdout] html:<mapper><update id="tables"> SELECT type, name, tbl_name, rootpage, sql FROM sqlite_master WHERE type = 'table' AND ( 1 = 2<trim prefixOverrides="," suffixOverrides=","><foreach collection="table_names" index="" item="item" > OR name = '#{item}' )</foreach></trim> ORDER by rootpage; </update></mapper>
[INFO] [stdout] load html:[
[INFO] [stdout]      {
[INFO] [stdout]         tag: "update",
[INFO] [stdout]         attributes: {
[INFO] [stdout]             "id": "tables",
[INFO] [stdout]         },
[INFO] [stdout]         childs: [
[INFO] [stdout]              {
[INFO] [stdout]                 data: "SELECT type, name, tbl_name, rootpage, sql FROM sqlite_master WHERE type = 'table' AND ( 1 = 2",
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 tag: "trim",
[INFO] [stdout]                 attributes: {
[INFO] [stdout]                     "prefixOverrides": ",",
[INFO] [stdout]                     "suffixOverrides": ",",
[INFO] [stdout]                 },
[INFO] [stdout]                 childs: [
[INFO] [stdout]                      {
[INFO] [stdout]                         tag: "foreach",
[INFO] [stdout]                         attributes: {
[INFO] [stdout]                             "collection": "table_names",
[INFO] [stdout]                             "item": "item",
[INFO] [stdout]                             "index": "",
[INFO] [stdout]                         },
[INFO] [stdout]                         childs: [
[INFO] [stdout]                              {
[INFO] [stdout]                                 data: "OR name = '#{item}' )",
[INFO] [stdout]                             },
[INFO] [stdout]                         ],
[INFO] [stdout]                     },
[INFO] [stdout]                 ],
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 data: "ORDER by rootpage;",
[INFO] [stdout]             },
[INFO] [stdout]         ],
[INFO] [stdout]     },
[INFO] [stdout] ]
[INFO] [stdout] ............gen rb_pysql_fn:
[INFO] [stdout]  use rbatis_sql :: ops :: * ; pub fn tables(arg : & rbson :: Bson, _tag : char)
[INFO] [stdout] -> (String, Vec < rbson :: Bson >)
[INFO] [stdout] {
[INFO] [stdout]     use rbatis_sql :: ops :: AsProxy ; let mut sql = String ::
[INFO] [stdout]     with_capacity(1000) ; let mut args = Vec :: with_capacity(20) ;
[INFO] [stdout]     sql.push_str("SELECT type, name, tbl_name, rootpage, sql FROM sqlite_master WHERE type = 'table' AND ( 1 = 2")
[INFO] [stdout]     ; sql.push_str("") ;
[INFO] [stdout]     sql.push_str(&
[INFO] [stdout]     {
[INFO] [stdout]         let mut sql = String :: new() ; let c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_ =
[INFO] [stdout]         { let result = { arg.index("table_names") } ; result } ;
[INFO] [stdout]         sql.push_str(" ") ; if c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_.is_array()
[INFO] [stdout]         {
[INFO] [stdout]             let mut index = 0 ;
[INFO] [stdout]             {
[INFO] [stdout]                 let foreach_arr =
[INFO] [stdout]                 c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_.array().unwrap() ; for item
[INFO] [stdout]                 in foreach_arr
[INFO] [stdout]                 {
[INFO] [stdout]                     let item = item ; let Zm9yZWFjaDppdGVt =
[INFO] [stdout]                     { let result = { item } ; result } ;
[INFO] [stdout]                     args.push(rbson :: bson! (Zm9yZWFjaDppdGVt)) ;
[INFO] [stdout]                     sql.push_str("OR name = '?' )") ; index = index + 1 ;
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]         } else if c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_.is_object()
[INFO] [stdout]         {
[INFO] [stdout]             {
[INFO] [stdout]                 let foreach_arr =
[INFO] [stdout]                 c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_.object().unwrap() ;
[INFO] [stdout]                 for(index, item) in foreach_arr
[INFO] [stdout]                 {
[INFO] [stdout]                     let item = item ; let Zm9yZWFjaDppdGVt =
[INFO] [stdout]                     { let result = { item } ; result } ;
[INFO] [stdout]                     args.push(rbson :: bson! (Zm9yZWFjaDppdGVt)) ;
[INFO] [stdout]                     sql.push_str("OR name = '?' )") ;
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]         } sql = sql.trim_start_matches(",").trim_end_matches(",").to_string()
[INFO] [stdout]         ; sql
[INFO] [stdout]     }) ; sql.push_str("") ; sql.push_str("ORDER by rootpage;") ; rbatis_sql ::
[INFO] [stdout]     sql_index! (sql, _tag) ; return(sql, args) ;
[INFO] [stdout] }
[INFO] [stdout] ............gen rb_pysql_fn end............
[INFO] [stdout] ............gen macro py_sql :
[INFO] [stdout]  pub async fn columns(table_name : & str) -> rbatis :: core :: Result < Vec <
[INFO] [stdout] TableColumn > >
[INFO] [stdout] {
[INFO] [stdout]     let mut sql = "
[INFO] [stdout]     pragma table_info('#{table_names}');
[INFO] [stdout]     ".to_string()
[INFO] [stdout]     ; let mut rb_arg_map = rbson :: Document :: new() ;
[INFO] [stdout]     rb_arg_map.insert("table_name".to_string(), rbson ::
[INFO] [stdout]     to_bson(table_name).unwrap_or_default()) ; {} use rbatis :: executor ::
[INFO] [stdout]     { RbatisRef } ; let driver_type = RB.get_rbatis().driver_type() ? ; use
[INFO] [stdout]     rbatis :: { rbatis_sql, AsSqlTag } ; let sql_tag = driver_type.sql_tag() ;
[INFO] [stdout]     #[rb_py("
[INFO] [stdout]     pragma table_info('#{table_names}');
[INFO] [stdout]     ")] pub fn
[INFO] [stdout]     columns(arg : & rbson :: Bson, _tag : char) {} let(mut sql, rb_args) =
[INFO] [stdout]     columns(& rbson :: Bson :: Document(rb_arg_map), sql_tag) ;
[INFO] [stdout]     driver_type.do_replace_tag(& mut sql) ; use rbatis :: executor ::
[INFO] [stdout]     { Executor, ExecutorMut } ; RB.fetch(& sql, rb_args).await
[INFO] [stdout] }
[INFO] [stdout] ............gen macro py_sql end............
[INFO] [stdout] py_sql:
[INFO] [stdout]     pragma table_info('#{table_names}');
[INFO] [stdout]     
[INFO] [stdout] html:<mapper><update id="columns"> pragma table_info('#{table_names}'); </update></mapper>
[INFO] [stdout] load html:[
[INFO] [stdout]      {
[INFO] [stdout]         tag: "update",
[INFO] [stdout]         attributes: {
[INFO] [stdout]             "id": "columns",
[INFO] [stdout]         },
[INFO] [stdout]         childs: [
[INFO] [stdout]              {
[INFO] [stdout]                 data: "pragma table_info('#{table_names}');",
[INFO] [stdout]             },
[INFO] [stdout]         ],
[INFO] [stdout]     },
[INFO] [stdout] ]
[INFO] [stdout] ............gen rb_pysql_fn:
[INFO] [stdout]  use rbatis_sql :: ops :: * ; pub fn
[INFO] [stdout] columns(arg : & rbson :: Bson, _tag : char) -> (String, Vec < rbson :: Bson >)
[INFO] [stdout] {
[INFO] [stdout]     use rbatis_sql :: ops :: AsProxy ; let mut sql = String ::
[INFO] [stdout]     with_capacity(1000) ; let mut args = Vec :: with_capacity(20) ; let
[INFO] [stdout]     c2VsZWN0OnRhYmxlX25hbWVz =
[INFO] [stdout]     { let result = { arg.index("table_names") } ; result } ;
[INFO] [stdout]     args.push(rbson :: bson! (c2VsZWN0OnRhYmxlX25hbWVz)) ;
[INFO] [stdout]     sql.push_str("pragma table_info('?');") ; rbatis_sql :: sql_index!
[INFO] [stdout]     (sql, _tag) ; return(sql, args) ;
[INFO] [stdout] }
[INFO] [stdout] ............gen rb_pysql_fn end............
[INFO] [stderr]    Compiling crab-service v0.1.0 (/opt/rustwide/workdir/crab-service)
[INFO] [stdout] warning: unused import: `ConfigUtil`
[INFO] [stdout]  --> crab-service/src/user.rs:5:18
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crab_cache::{ConfigUtil, RedisCache};
[INFO] [stdout]   |                  ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `code`
[INFO] [stdout]   --> crab-service/src/user.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 27 |         code: Option<String>,
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_code`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `uuid`
[INFO] [stdout]   --> crab-service/src/user.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 |         uuid: Option<String>,
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_uuid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `verify_captcha` is never used
[INFO] [stdout]    --> crab-service/src/user.rs:138:14
[INFO] [stdout]     |
[INFO] [stdout] 21  | impl SysLoginSrv {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 138 |     async fn verify_captcha(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling crab-admin v0.1.0 (/opt/rustwide/workdir/crab-admin)
[INFO] [stdout] warning: 4 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling xlsxwriter v0.3.5
[INFO] [stderr]    Compiling crab-excel v0.1.0 (/opt/rustwide/workdir/crab-excel)
[INFO] [stderr]     Finished dev [unoptimized + debuginfo] target(s) in 3m 35s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: nom v5.1.2, quick-xml v0.19.0
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
[INFO] running `Command { std: "docker" "inspect" "c45093701ee540c3383a530a671fa339f5dc7e15fc723208528ab2f56c19337d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c45093701ee540c3383a530a671fa339f5dc7e15fc723208528ab2f56c19337d", kill_on_drop: false }`
[INFO] [stdout] c45093701ee540c3383a530a671fa339f5dc7e15fc723208528ab2f56c19337d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5ff2268d62e97bff2cde7d5815dd6ed5b47097566f13b8d0ca110b04b60e07ed" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2023-04-20" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 73e8017994f9ee6d9044001bc742d44a7d7b7de30296e125ed11a6812fd770ef
[INFO] running `Command { std: "docker" "start" "-a" "73e8017994f9ee6d9044001bc742d44a7d7b7de30296e125ed11a6812fd770ef", kill_on_drop: false }`
[INFO] [stderr]    Compiling async-stream-impl v0.3.3
[INFO] [stderr]    Compiling crab-excel-derive v0.1.0 (/opt/rustwide/workdir/crab-excel-derive)
[INFO] [stdout] warning: unused import: `ConfigUtil`
[INFO] [stdout]  --> crab-service/src/user.rs:5:18
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crab_cache::{ConfigUtil, RedisCache};
[INFO] [stdout]   |                  ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `code`
[INFO] [stdout]   --> crab-service/src/user.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 27 |         code: Option<String>,
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_code`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `uuid`
[INFO] [stdout]   --> crab-service/src/user.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 |         uuid: Option<String>,
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_uuid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `verify_captcha` is never used
[INFO] [stdout]    --> crab-service/src/user.rs:138:14
[INFO] [stdout]     |
[INFO] [stdout] 21  | impl SysLoginSrv {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 138 |     async fn verify_captcha(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 4 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling crab-service v0.1.0 (/opt/rustwide/workdir/crab-service)
[INFO] [stderr]    Compiling crab-admin v0.1.0 (/opt/rustwide/workdir/crab-admin)
[INFO] [stderr]    Compiling crab-cache v0.1.0 (/opt/rustwide/workdir/crab-cache)
[INFO] [stderr]    Compiling crab-model v0.1.0 (/opt/rustwide/workdir/crab-model)
[INFO] [stdout] warning: unused import: `ConfigUtil`
[INFO] [stdout]  --> crab-service/src/user.rs:5:18
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crab_cache::{ConfigUtil, RedisCache};
[INFO] [stdout]   |                  ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 用户信息表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysUser
[INFO] [stdout] {
[INFO] [stdout]     /// 用户ID
[INFO] [stdout]     pub id : Option < i64 >, /// 用户编号
[INFO] [stdout]     #[validate(length(max = 50))] pub no : Option < String >, /// 姓名
[INFO] [stdout]     #[validate(length(max = 50))] pub name : Option < String >, /// 帐号
[INFO] [stdout]     #[validate(length(max = 30))] pub account : Option < String >, /// 密码
[INFO] [stdout]     #[validate(length(max = 100))] pub password : Option < String >,
[INFO] [stdout]     /// 邮箱
[INFO] [stdout]     #[validate(length(max = 50))] pub email : Option < String >,
[INFO] [stdout]     /// 手机号码
[INFO] [stdout]     #[validate(length(max = 11))] pub phone : Option < String >,
[INFO] [stdout]     /// 性别（0男 1女 2未知）
[INFO] [stdout]     #[validate(length(max = 1))] pub sex : Option < String >, /// 头像地址
[INFO] [stdout]     #[validate(length(max = 100))] pub avatar : Option < String >,
[INFO] [stdout]     /// 帐号状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 最后登录IP
[INFO] [stdout]     #[validate(length(max = 128))] pub login_ip : Option < String >,
[INFO] [stdout]     /// 最后登录时间
[INFO] [stdout]     pub login_at : Option < rbatis :: DateTimeNative >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysUser
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; } "no"
[INFO] [stdout]             => { return rbson :: to_bson(& self.no).unwrap_or_default() ; }
[INFO] [stdout]             "name" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.name).unwrap_or_default() ; }
[INFO] [stdout]             "account" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.account).unwrap_or_default() ; }
[INFO] [stdout]             "password" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.password).unwrap_or_default() ; }
[INFO] [stdout]             "email" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.email).unwrap_or_default() ; }
[INFO] [stdout]             "phone" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.phone).unwrap_or_default() ; }
[INFO] [stdout]             "sex" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sex).unwrap_or_default() ; }
[INFO] [stdout]             "avatar" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.avatar).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "login_ip" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.login_ip).unwrap_or_default() ; }
[INFO] [stdout]             "login_at" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.login_at).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_user".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,no,name,account,password,email,phone,sex,avatar,status,login_ip,login_at,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 菜单信息表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysMenu
[INFO] [stdout] {
[INFO] [stdout]     /// 主键ID
[INFO] [stdout]     pub id : Option < i64 >, /// 菜单编码
[INFO] [stdout]     #[validate(length(max = 500))] pub menu_code : Option < String >,
[INFO] [stdout]     /// 菜单名称
[INFO] [stdout]     #[validate(length(max = 50))] pub menu_name : Option < String >,
[INFO] [stdout]     /// 父菜单ID
[INFO] [stdout]     pub pid : Option < i64 >, /// 显示顺序
[INFO] [stdout]     pub sort : Option < i32 >, /// 路由地址
[INFO] [stdout]     #[validate(length(max = 200))] pub path : Option < String >,
[INFO] [stdout]     /// 组件路径
[INFO] [stdout]     #[validate(length(max = 255))] pub component : Option < String >,
[INFO] [stdout]     /// 是否为外链（0是 1否）
[INFO] [stdout]     pub is_frame : Option < i32 >, /// 是否缓存（0缓存 1不缓存）
[INFO] [stdout]     pub is_cache : Option < i32 >,
[INFO] [stdout]     /// 菜单类型（M目录 C菜单 F按钮）
[INFO] [stdout]     #[validate(length(max = 1))] pub menu_type : Option < String >,
[INFO] [stdout]     /// 菜单状态（0显示 1隐藏）
[INFO] [stdout]     pub visible : Option < i8 >, /// 菜单状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 权限标识
[INFO] [stdout]     #[validate(length(max = 100))] pub perms : Option < String >,
[INFO] [stdout]     /// 菜单图标
[INFO] [stdout]     #[validate(length(max = 100))] pub icon : Option < String >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 父id集合
[INFO] [stdout]     #[validate(length(max = 500))] pub parent_ids : Option < String >,
[INFO] [stdout]     /// 排序
[INFO] [stdout]     pub tree_sort : Option < i32 >, /// 排序集合
[INFO] [stdout]     #[validate(length(max = 500))] pub tree_sorts : Option < String >,
[INFO] [stdout]     /// 层级
[INFO] [stdout]     pub tree_level : Option < i32 >, /// 是否子节点（0是 1否）
[INFO] [stdout]     pub tree_leaf : Option < i8 >, /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysMenu
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "menu_code" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.menu_code).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "menu_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.menu_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "pid" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.pid).unwrap_or_default() ; }
[INFO] [stdout]             "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "path" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.path).unwrap_or_default() ; }
[INFO] [stdout]             "component" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.component).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "is_frame" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_frame).unwrap_or_default() ; }
[INFO] [stdout]             "is_cache" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_cache).unwrap_or_default() ; }
[INFO] [stdout]             "menu_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.menu_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "visible" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.visible).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "perms" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.perms).unwrap_or_default() ; }
[INFO] [stdout]             "icon" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.icon).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "parent_ids" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.parent_ids).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tree_sort" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.tree_sort).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tree_sorts" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.tree_sorts).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tree_level" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.tree_level).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tree_leaf" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.tree_leaf).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_menu".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,menu_code,menu_name,pid,sort,path,component,is_frame,is_cache,menu_type,visible,status,perms,icon,remark,parent_ids,tree_sort,tree_sorts,tree_level,tree_leaf,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 模板配置表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct GenConfigTemplate
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 模板名称
[INFO] [stdout]     #[validate(length(max = 50))] pub template_name : Option < String >,
[INFO] [stdout]     /// 作者
[INFO] [stdout]     #[validate(length(max = 100))] pub function_author : Option < String >,
[INFO] [stdout]     /// 邮箱
[INFO] [stdout]     #[validate(length(max = 100))] pub function_author_email : Option < String
[INFO] [stdout]     >, /// 工作空间路径
[INFO] [stdout]     #[validate(length(max = 200))] pub workspace_path : Option < String >,
[INFO] [stdout]     /// 模块名
[INFO] [stdout]     #[validate(length(max = 30))] pub module_name : Option < String >,
[INFO] [stdout]     /// 模块包路径
[INFO] [stdout]     #[validate(length(max = 100))] pub package_name : Option < String >,
[INFO] [stdout]     /// 前端工作空间路径
[INFO] [stdout]     #[validate(length(max = 200))] pub web_workspace_path : Option < String >,
[INFO] [stdout]     /// 是否默认
[INFO] [stdout]     #[validate(length(max = 10))] pub template_default : Option < String >,
[INFO] [stdout]     /// 排序
[INFO] [stdout]     pub sort : Option < i32 >, /// 状态（0正常 1 停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for GenConfigTemplate
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "template_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.template_name).unwrap_or_default() ;
[INFO] [stdout]             } "function_author" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_author).unwrap_or_default() ;
[INFO] [stdout]             } "function_author_email" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_author_email).unwrap_or_default() ;
[INFO] [stdout]             } "workspace_path" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.workspace_path).unwrap_or_default() ;
[INFO] [stdout]             } "module_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.module_name).unwrap_or_default() ;
[INFO] [stdout]             } "package_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.package_name).unwrap_or_default() ;
[INFO] [stdout]             } "web_workspace_path" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.web_workspace_path).unwrap_or_default() ;
[INFO] [stdout]             } "template_default" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.template_default).unwrap_or_default() ;
[INFO] [stdout]             } "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "gen_config_template".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,template_name,function_author,function_author_email,workspace_path,module_name,package_name,web_workspace_path,template_default,sort,status,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stderr]    Compiling crab-common v0.1.0 (/opt/rustwide/workdir/crab-common)
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 代码生成业务表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct GenTable
[INFO] [stdout] {
[INFO] [stdout]     /// 编号
[INFO] [stdout]     pub id : Option < i64 >, /// 表名称
[INFO] [stdout]     #[validate(length(max = 200))] pub table_name : Option < String >,
[INFO] [stdout]     /// 表描述
[INFO] [stdout]     #[validate(length(max = 500))] pub table_comment : Option < String >,
[INFO] [stdout]     /// 关联子表的表名
[INFO] [stdout]     #[validate(length(max = 64))] pub sub_table_name : Option < String >,
[INFO] [stdout]     /// 子表关联的外键名
[INFO] [stdout]     #[validate(length(max = 64))] pub sub_table_fk_name : Option < String >,
[INFO] [stdout]     /// 实体类名称
[INFO] [stdout]     #[validate(length(max = 100))] pub class_name : Option < String >,
[INFO] [stdout]     /// 使用的模板（crud单表操作 tree树表操作）
[INFO] [stdout]     #[validate(length(max = 200))] pub tpl_category : Option < String >,
[INFO] [stdout]     /// 工作空间
[INFO] [stdout]     #[validate(length(max = 200))] pub workspace_path : Option < String >,
[INFO] [stdout]     /// 模块名
[INFO] [stdout]     #[validate(length(max = 30))] pub module_name : Option < String >,
[INFO] [stdout]     /// 包路径
[INFO] [stdout]     #[validate(length(max = 100))] pub package_name : Option < String >,
[INFO] [stdout]     /// 业务名
[INFO] [stdout]     #[validate(length(max = 30))] pub business_name : Option < String >,
[INFO] [stdout]     /// 功能名
[INFO] [stdout]     #[validate(length(max = 50))] pub function_name : Option < String >,
[INFO] [stdout]     /// 作者
[INFO] [stdout]     #[validate(length(max = 50))] pub function_author : Option < String >,
[INFO] [stdout]     /// 邮箱
[INFO] [stdout]     #[validate(length(max = 200))] pub function_author_email : Option < String
[INFO] [stdout]     >, /// 前端工作空间路径
[INFO] [stdout]     #[validate(length(max = 200))] pub web_workspace_path : Option < String >,
[INFO] [stdout]     /// 生成代码方式（0zip压缩包 1自定义路径）
[INFO] [stdout]     pub gen_type : Option < i8 >, /// 扩展选项
[INFO] [stdout]     #[validate(length(max = 4000))] pub options : Option < String >,
[INFO] [stdout]     /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for GenTable
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "table_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.table_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "table_comment" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.table_comment).unwrap_or_default() ;
[INFO] [stdout]             } "sub_table_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.sub_table_name).unwrap_or_default() ;
[INFO] [stdout]             } "sub_table_fk_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.sub_table_fk_name).unwrap_or_default() ;
[INFO] [stdout]             } "class_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.class_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "tpl_category" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.tpl_category).unwrap_or_default() ;
[INFO] [stdout]             } "workspace_path" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.workspace_path).unwrap_or_default() ;
[INFO] [stdout]             } "module_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.module_name).unwrap_or_default() ;
[INFO] [stdout]             } "package_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.package_name).unwrap_or_default() ;
[INFO] [stdout]             } "business_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.business_name).unwrap_or_default() ;
[INFO] [stdout]             } "function_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_name).unwrap_or_default() ;
[INFO] [stdout]             } "function_author" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_author).unwrap_or_default() ;
[INFO] [stdout]             } "function_author_email" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.function_author_email).unwrap_or_default() ;
[INFO] [stdout]             } "web_workspace_path" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.web_workspace_path).unwrap_or_default() ;
[INFO] [stdout]             } "gen_type" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.gen_type).unwrap_or_default() ; }
[INFO] [stdout]             "options" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.options).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "gen_table".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,table_name,table_comment,sub_table_name,sub_table_fk_name,class_name,tpl_category,workspace_path,module_name,package_name,business_name,function_name,function_author,function_author_email,web_workspace_path,gen_type,options,remark,create_by,create_at,update_by,update_at".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 代码生成业务表字段
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct GenTableColumn
[INFO] [stdout] {
[INFO] [stdout]     /// 编号
[INFO] [stdout]     pub id : Option < i64 >, /// 归属表编号
[INFO] [stdout]     #[validate(length(max = 64))] pub table_id : Option < String >,
[INFO] [stdout]     /// 列名称
[INFO] [stdout]     #[validate(length(max = 200))] pub column_name : Option < String >,
[INFO] [stdout]     /// 列描述
[INFO] [stdout]     #[validate(length(max = 500))] pub column_comment : Option < String >,
[INFO] [stdout]     /// 列类型
[INFO] [stdout]     #[validate(length(max = 100))] pub column_type : Option < String >,
[INFO] [stdout]     /// JAVA类型
[INFO] [stdout]     #[validate(length(max = 500))] pub java_type : Option < String >,
[INFO] [stdout]     /// JAVA字段名
[INFO] [stdout]     #[validate(length(max = 200))] pub java_field : Option < String >,
[INFO] [stdout]     /// 是否主键（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_pk : Option < String >,
[INFO] [stdout]     /// 是否自增（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_increment : Option < String >,
[INFO] [stdout]     /// 是否必填（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_required : Option < String >,
[INFO] [stdout]     /// 是否为插入字段（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_insert : Option < String >,
[INFO] [stdout]     /// 是否编辑字段（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_edit : Option < String >,
[INFO] [stdout]     /// 是否列表字段（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_list : Option < String >,
[INFO] [stdout]     /// 是否查询字段（1是）
[INFO] [stdout]     #[validate(length(max = 10))] pub is_query : Option < String >,
[INFO] [stdout]     /// 是否唯一性
[INFO] [stdout]     #[validate(length(max = 10))] pub is_unique : Option < String >,
[INFO] [stdout]     /// 是否记录日志
[INFO] [stdout]     #[validate(length(max = 10))] pub is_log : Option < String >,
[INFO] [stdout]     /// 是否排序
[INFO] [stdout]     #[validate(length(max = 10))] pub is_column_sort : Option < String >,
[INFO] [stdout]     /// 新行
[INFO] [stdout]     #[validate(length(max = 10))] pub is_new_row : Option < String >,
[INFO] [stdout]     /// 列数
[INFO] [stdout]     pub col_span : Option < i32 >, /// 对齐方式
[INFO] [stdout]     #[validate(length(max = 10))] pub align_type : Option < String >,
[INFO] [stdout]     /// 查询方式（等于、不等于、大于、小于、范围）
[INFO] [stdout]     #[validate(length(max = 200))] pub query_type : Option < String >,
[INFO] [stdout]     /// 显示类型（文本框、文本域、下拉框、复选框、单选框、日期控件）
[INFO] [stdout]     #[validate(length(max = 200))] pub html_type : Option < String >,
[INFO] [stdout]     /// 字典类型
[INFO] [stdout]     #[validate(length(max = 200))] pub dict_type : Option < String >,
[INFO] [stdout]     /// 字段校验
[INFO] [stdout]     #[validate(length(max = 100))] pub col_check : Option < String >,
[INFO] [stdout]     /// 排序
[INFO] [stdout]     pub sort : Option < i32 >, /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for GenTableColumn
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "table_id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.table_id).unwrap_or_default() ; }
[INFO] [stdout]             "column_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.column_name).unwrap_or_default() ;
[INFO] [stdout]             } "column_comment" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.column_comment).unwrap_or_default() ;
[INFO] [stdout]             } "column_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.column_type).unwrap_or_default() ;
[INFO] [stdout]             } "java_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.java_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "java_field" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.java_field).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "is_pk" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_pk).unwrap_or_default() ; }
[INFO] [stdout]             "is_increment" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.is_increment).unwrap_or_default() ;
[INFO] [stdout]             } "is_required" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.is_required).unwrap_or_default() ;
[INFO] [stdout]             } "is_insert" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.is_insert).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "is_edit" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_edit).unwrap_or_default() ; }
[INFO] [stdout]             "is_list" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_list).unwrap_or_default() ; }
[INFO] [stdout]             "is_query" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_query).unwrap_or_default() ; }
[INFO] [stdout]             "is_unique" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.is_unique).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "is_log" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.is_log).unwrap_or_default() ; }
[INFO] [stdout]             "is_column_sort" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.is_column_sort).unwrap_or_default() ;
[INFO] [stdout]             } "is_new_row" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.is_new_row).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "col_span" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.col_span).unwrap_or_default() ; }
[INFO] [stdout]             "align_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.align_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "query_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.query_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "html_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.html_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "dict_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.dict_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "col_check" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.col_check).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "gen_table_column".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,table_id,column_name,column_comment,column_type,java_type,java_field,is_pk,is_increment,is_required,is_insert,is_edit,is_list,is_query,is_unique,is_log,is_column_sort,is_new_row,col_span,align_type,query_type,html_type,dict_type,col_check,sort,create_by,create_at,update_by,update_at".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 参数配置表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysConfig
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 参数名称
[INFO] [stdout]     #[validate(length(max = 100))] pub config_name : Option < String >,
[INFO] [stdout]     /// 参数键名
[INFO] [stdout]     #[validate(length(max = 100))] pub config_key : Option < String >,
[INFO] [stdout]     /// 参数键值
[INFO] [stdout]     #[validate(length(max = 500))] pub config_value : Option < String >,
[INFO] [stdout]     /// 系统内置（0否 1是）
[INFO] [stdout]     pub config_type : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysConfig
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "config_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.config_name).unwrap_or_default() ;
[INFO] [stdout]             } "config_key" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.config_key).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "config_value" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.config_value).unwrap_or_default() ;
[INFO] [stdout]             } "config_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.config_type).unwrap_or_default() ;
[INFO] [stdout]             } "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_config".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,config_name,config_key,config_value,config_type,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] warning: unused variable: `code`
[INFO] [stdout]   --> crab-service/src/user.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 27 |         code: Option<String>,
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_code`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `uuid`
[INFO] [stdout]   --> crab-service/src/user.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 |         uuid: Option<String>,
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_uuid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 系统访问记录
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysLoginLog
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 用户账号
[INFO] [stdout]     #[validate(length(max = 50))] pub account : Option < String >,
[INFO] [stdout]     /// 登录IP地址
[INFO] [stdout]     #[validate(length(max = 128))] pub ip : Option < String >,
[INFO] [stdout]     /// 登录地点
[INFO] [stdout]     #[validate(length(max = 255))] pub login_location : Option < String >,
[INFO] [stdout]     /// 浏览器类型
[INFO] [stdout]     #[validate(length(max = 50))] pub browser : Option < String >,
[INFO] [stdout]     /// 操作系统
[INFO] [stdout]     #[validate(length(max = 50))] pub os : Option < String >,
[INFO] [stdout]     /// 登录状态（0成功 1失败）
[INFO] [stdout]     pub status : Option < i8 >, /// 提示消息
[INFO] [stdout]     #[validate(length(max = 255))] pub msg : Option < String >,
[INFO] [stdout]     /// 访问时间
[INFO] [stdout]     pub login_at : Option < rbatis :: DateTimeNative >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysLoginLog
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "account" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.account).unwrap_or_default() ; }
[INFO] [stdout]             "ip" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.ip).unwrap_or_default() ; }
[INFO] [stdout]             "login_location" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.login_location).unwrap_or_default() ;
[INFO] [stdout]             } "browser" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.browser).unwrap_or_default() ; }
[INFO] [stdout]             "os" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.os).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "msg" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.msg).unwrap_or_default() ; }
[INFO] [stdout]             "login_at" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.login_at).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_login_log".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,account,ip,login_location,browser,os,status,msg,login_at,remark,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] warning: associated function `verify_captcha` is never used
[INFO] [stdout]    --> crab-service/src/user.rs:138:14
[INFO] [stdout]     |
[INFO] [stdout] 21  | impl SysLoginSrv {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 138 |     async fn verify_captcha(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 字典类型表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysDictType
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 字典名称
[INFO] [stdout]     #[validate(length(max = 100))] pub name : Option < String >,
[INFO] [stdout]     /// 字典类型
[INFO] [stdout]     #[validate(length(max = 100))] pub r#type : Option < String >,
[INFO] [stdout]     /// 状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysDictType
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "name" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.name).unwrap_or_default() ; }
[INFO] [stdout]             "r#type" | "type" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.r#type).unwrap_or_default() ; }
[INFO] [stdout]             "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_dict_type".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,name,type,status,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 字典数据表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysDictData
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 字典类型
[INFO] [stdout]     #[validate(length(max = 100))] pub dict_type : Option < String >,
[INFO] [stdout]     /// 字典编码
[INFO] [stdout]     pub code : Option < i64 >, /// 字典标签
[INFO] [stdout]     #[validate(length(max = 100))] pub label : Option < String >,
[INFO] [stdout]     /// 字典键值
[INFO] [stdout]     #[validate(length(max = 100))] pub value : Option < String >,
[INFO] [stdout]     /// 是否默认（1是 0否）
[INFO] [stdout]     pub is_default : Option < i8 >, /// 字典排序
[INFO] [stdout]     pub sort : Option < i16 >, /// 样式属性（其他样式扩展）
[INFO] [stdout]     #[validate(length(max = 100))] pub css_class : Option < String >,
[INFO] [stdout]     /// 表格回显样式
[INFO] [stdout]     #[validate(length(max = 100))] pub table_class : Option < String >,
[INFO] [stdout]     /// 状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysDictData
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "dict_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.dict_type).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "code" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.code).unwrap_or_default() ; }
[INFO] [stdout]             "label" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.label).unwrap_or_default() ; }
[INFO] [stdout]             "value" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.value).unwrap_or_default() ; }
[INFO] [stdout]             "is_default" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.is_default).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "css_class" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.css_class).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "table_class" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.table_class).unwrap_or_default() ;
[INFO] [stdout]             } "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_dict_data".to_string() } fn
[INFO] [stdout]     table_columns() -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,dict_type,code,label,value,is_default,sort,css_class,table_class,status,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 用户和角色关联表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysUserRole
[INFO] [stdout] {
[INFO] [stdout]     /// 用户ID
[INFO] [stdout]     pub user_id : Option < i64 >, /// 角色ID
[INFO] [stdout]     pub role_id : Option < i64 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysUserRole
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "user_id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.user_id).unwrap_or_default() ; }
[INFO] [stdout]             "role_id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.role_id).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_user_role".to_string() } fn
[INFO] [stdout]     table_columns() -> String { "user_id,role_id".to_string() } fn
[INFO] [stdout]     formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 角色信息表
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysRole
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 角色名称
[INFO] [stdout]     #[validate(length(max = 30))] pub role_name : Option < String >,
[INFO] [stdout]     /// 角色权限字符串
[INFO] [stdout]     #[validate(length(max = 100))] pub role_key : Option < String >,
[INFO] [stdout]     /// 显示顺序
[INFO] [stdout]     pub sort : Option < i32 >,
[INFO] [stdout]     /// 数据范围（1：全部数据权限 2：自定数据权限 ）
[INFO] [stdout]     pub data_scope : Option < i8 >, /// 菜单树选择项是否关联显示
[INFO] [stdout]     pub menu_check_strictly : Option < i8 >,
[INFO] [stdout]     /// 角色状态（0正常 1停用）
[INFO] [stdout]     pub status : Option < i8 >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >,
[INFO] [stdout]     /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysRole
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "role_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.role_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "role_key" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.role_key).unwrap_or_default() ; }
[INFO] [stdout]             "sort" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sort).unwrap_or_default() ; }
[INFO] [stdout]             "data_scope" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.data_scope).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "menu_check_strictly" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.menu_check_strictly).unwrap_or_default() ;
[INFO] [stdout]             } "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_role".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,role_name,role_key,sort,data_scope,menu_check_strictly,status,remark,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stderr]    Compiling crab-config v0.1.0 (/opt/rustwide/workdir/crab-config)
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 操作日志记录
[INFO] [stdout] #[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash,
[INFO] [stdout] Serialize, Deserialize, Validate,)]
[INFO] [stdout] #[serde(rename_all(serialize = "camelCase"))] pub struct SysLog
[INFO] [stdout] {
[INFO] [stdout]     /// ID
[INFO] [stdout]     pub id : Option < i64 >, /// 模块标题
[INFO] [stdout]     #[validate(length(max = 50))] pub title : Option < String >,
[INFO] [stdout]     /// 业务类型（0其它 1新增 2修改 3删除）
[INFO] [stdout]     pub business_type : Option < i8 >, /// 方法名称
[INFO] [stdout]     #[validate(length(max = 100))] pub method : Option < String >,
[INFO] [stdout]     /// 请求方式
[INFO] [stdout]     #[validate(length(max = 10))] pub request_method : Option < String >,
[INFO] [stdout]     /// 操作类别（0其它 1后台用户 2手机端用户）
[INFO] [stdout]     pub operator_type : Option < i8 >, /// 操作人员
[INFO] [stdout]     #[validate(length(max = 50))] pub oper_name : Option < String >,
[INFO] [stdout]     /// 请求URL
[INFO] [stdout]     #[validate(length(max = 255))] pub oper_url : Option < String >,
[INFO] [stdout]     /// 主机地址
[INFO] [stdout]     #[validate(length(max = 128))] pub oper_ip : Option < String >,
[INFO] [stdout]     /// 操作地点
[INFO] [stdout]     #[validate(length(max = 255))] pub oper_location : Option < String >,
[INFO] [stdout]     /// 请求参数
[INFO] [stdout]     #[validate(length(max = 2000))] pub oper_param : Option < String >,
[INFO] [stdout]     /// 返回结果集
[INFO] [stdout]     #[validate(length(max = 65535))] pub json_result : Option < String >,
[INFO] [stdout]     /// 日志变更内容
[INFO] [stdout]     #[validate(length(max = 65535))] pub log_content : Option < String >,
[INFO] [stdout]     /// 操作状态（0正常 1异常）
[INFO] [stdout]     pub status : Option < i8 >, /// 错误消息
[INFO] [stdout]     #[validate(length(max = 2000))] pub error_msg : Option < String >,
[INFO] [stdout]     /// 操作时间
[INFO] [stdout]     pub oper_time : Option < rbatis :: DateTimeNative >, /// 备注
[INFO] [stdout]     #[validate(length(max = 500))] pub remark : Option < String >, /// 耗时
[INFO] [stdout]     pub take_up_time : Option < i32 >, /// 创建者
[INFO] [stdout]     pub create_by : Option < i64 >, /// 创建时间
[INFO] [stdout]     pub create_at : Option < rbatis :: DateTimeNative >, /// 更新者
[INFO] [stdout]     pub update_by : Option < i64 >, /// 更新时间
[INFO] [stdout]     pub update_at : Option < rbatis :: DateTimeNative >,
[INFO] [stdout]     /// 删除标志（0代表存在 1代表删除）
[INFO] [stdout]     pub del_flag : Option < i8 >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for SysLog
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "id" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.id).unwrap_or_default() ; }
[INFO] [stdout]             "title" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.title).unwrap_or_default() ; }
[INFO] [stdout]             "business_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.business_type).unwrap_or_default() ;
[INFO] [stdout]             } "method" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.method).unwrap_or_default() ; }
[INFO] [stdout]             "request_method" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.request_method).unwrap_or_default() ;
[INFO] [stdout]             } "operator_type" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.operator_type).unwrap_or_default() ;
[INFO] [stdout]             } "oper_name" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.oper_name).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "oper_url" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.oper_url).unwrap_or_default() ; }
[INFO] [stdout]             "oper_ip" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.oper_ip).unwrap_or_default() ; }
[INFO] [stdout]             "oper_location" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.oper_location).unwrap_or_default() ;
[INFO] [stdout]             } "oper_param" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.oper_param).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "json_result" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.json_result).unwrap_or_default() ;
[INFO] [stdout]             } "log_content" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.log_content).unwrap_or_default() ;
[INFO] [stdout]             } "status" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.status).unwrap_or_default() ; }
[INFO] [stdout]             "error_msg" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.error_msg).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "oper_time" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.oper_time).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "remark" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.remark).unwrap_or_default() ; }
[INFO] [stdout]             "take_up_time" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson ::
[INFO] [stdout]                 to_bson(& self.take_up_time).unwrap_or_default() ;
[INFO] [stdout]             } "create_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "create_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.create_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_by" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_by).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "update_at" =>
[INFO] [stdout]             {
[INFO] [stdout]                 return rbson :: to_bson(& self.update_at).unwrap_or_default()
[INFO] [stdout]                 ;
[INFO] [stdout]             } "del_flag" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.del_flag).unwrap_or_default() ; }
[INFO] [stdout]             _ => { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "sys_log".to_string() } fn table_columns()
[INFO] [stdout]     -> String
[INFO] [stdout]     {
[INFO] [stdout]         "id,title,business_type,method,request_method,operator_type,oper_name,oper_url,oper_ip,oper_location,oper_param,json_result,log_content,status,error_msg,oper_time,remark,take_up_time,create_by,create_at,update_by,update_at,del_flag".to_string()
[INFO] [stdout]     } fn formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stderr]    Compiling crab-util v0.1.0 (/opt/rustwide/workdir/crab-util)
[INFO] [stdout] warning: 4 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling crab-excel v0.1.0 (/opt/rustwide/workdir/crab-excel)
[INFO] [stderr]    Compiling async-stream v0.3.3
[INFO] [stdout] field_name = id
[INFO] [stdout] col_name = 用户ID
[INFO] [stdout] field_name = name
[INFO] [stdout] col_name = 用户昵称
[INFO] [stdout] field_name = roles
[INFO] [stdout] col_name = 
[INFO] [stdout] field_name = del
[INFO] [stdout] col_name = 是否删除
[INFO] [stdout] field_name = date
[INFO] [stdout] col_name = 日期
[INFO] [stdout] ["id", "name", "roles", "del", "date"]
[INFO] [stdout] "use simple_excel_writer :: * ; impl ExcelWriter for TestExcel\n{\n    type Input = Self ; fn simple_write(data : & [Self :: Input]) -> Result <\n    Option < Vec < u8 >>, crab_excel :: ExcelError >\n    {\n        let mut wb = Workbook :: create(\"测试数据.xlsx\") ; let mut sheet =\n        wb.create_sheet(\"测试数据\") ;\n        sheet.add_column(Column { width : 30.0 }) ;\n        sheet.add_column(Column { width : 30.0 }) ;\n        wb.write_sheet(& mut sheet, | sheet_writer |\n        {\n            let sw = sheet_writer ;\n            sw.append_row({\n                let mut row = Row :: new() ; row.add_cell(\"id\") ;\n                row.add_cell(\"name\") ; row.add_cell(\"roles\") ;\n                row.add_cell(\"del\") ; row.add_cell(\"date\") ; row\n            }) ? ; for dt in data.iter()\n            {\n                let mut row = Row :: new() ; for fd in 0 .. 4\n                { row.add_cell(dt.name.clone()) ; } sw.append_row(row) ;\n            } Ok(())\n        }).expect(\"write excel error!\") ;\n        wb.close().map_err(| e | crab_excel :: ExcelError ::\n        E(\"close excel error!\".to_string()))\n    }\n}"
[INFO] [stdout] warning: fields `id`, `roles`, `del`, and `date` are never read
[INFO] [stdout]   --> crab-excel/tests/excel_writer.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout] 5  | struct TestExcel {
[INFO] [stdout]    |        --------- fields in this struct
[INFO] [stdout] 6  |     #[excel_col(name = "用户ID", sort = 1)]
[INFO] [stdout] 7  |     id: u32,
[INFO] [stdout]    |     ^^
[INFO] [stdout] ...
[INFO] [stdout] 11 |     roles: Vec<u32>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 12 |     #[excel_col(name = "是否删除", sort = 2)]
[INFO] [stdout] 13 |     del: u8,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 14 |     #[excel_col(sort = 1, name = "日期")]
[INFO] [stdout] 15 |     date: u128,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestExcel` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]  --> crab-excel/tests/excel_writer.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 | #[derive(Debug, Default, ExcelWriter)]
[INFO] [stdout]   |                          ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]   = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout]   = note: this warning originates in the derive macro `ExcelWriter` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling tokio-test v0.4.2
[INFO] [stderr]    Compiling generator v0.2.0 (/opt/rustwide/workdir/generator)
[INFO] [stderr]    Compiling crab-lib v0.1.0 (/opt/rustwide/workdir/crab-lib)
[INFO] [stdout] warning: 2 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] ............gen macro py_sql :
[INFO] [stdout]  pub async fn tables(table_names : & str) -> rbatis :: core :: Result < Vec <
[INFO] [stdout] Table > >
[INFO] [stdout] {
[INFO] [stdout]     let mut sql =
[INFO] [stdout]     "
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         TABLE_TYPE,
[INFO] [stdout]         `ENGINE`,
[INFO] [stdout]         VERSION,
[INFO] [stdout]         ROW_FORMAT,
[INFO] [stdout]         TABLE_ROWS,
[INFO] [stdout]         AVG_ROW_LENGTH,
[INFO] [stdout]         DATA_LENGTH,
[INFO] [stdout]         MAX_DATA_LENGTH,
[INFO] [stdout]         INDEX_LENGTH,
[INFO] [stdout]         DATA_FREE,
[INFO] [stdout]         AUTO_INCREMENT,
[INFO] [stdout]         CREATE_TIME,
[INFO] [stdout]         UPDATE_TIME,
[INFO] [stdout]         CHECK_TIME,
[INFO] [stdout]         TABLE_COLLATION,
[INFO] [stdout]         `CHECKSUM`,
[INFO] [stdout]         CREATE_OPTIONS,
[INFO] [stdout]         TABLE_COMMENT
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.`TABLES`
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         CREATE_TIME;
[INFO] [stdout]     ".to_string()
[INFO] [stdout]     ; let mut rb_arg_map = rbson :: Document :: new() ;
[INFO] [stdout]     rb_arg_map.insert("table_names".to_string(), rbson ::
[INFO] [stdout]     to_bson(table_names).unwrap_or_default()) ; {} use rbatis :: executor ::
[INFO] [stdout]     { RbatisRef } ; let driver_type = RB.get_rbatis().driver_type() ? ; use
[INFO] [stdout]     rbatis :: { rbatis_sql, AsSqlTag } ; let sql_tag = driver_type.sql_tag() ;
[INFO] [stdout]     #[rb_py("
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         TABLE_TYPE,
[INFO] [stdout]         `ENGINE`,
[INFO] [stdout]         VERSION,
[INFO] [stdout]         ROW_FORMAT,
[INFO] [stdout]         TABLE_ROWS,
[INFO] [stdout]         AVG_ROW_LENGTH,
[INFO] [stdout]         DATA_LENGTH,
[INFO] [stdout]         MAX_DATA_LENGTH,
[INFO] [stdout]         INDEX_LENGTH,
[INFO] [stdout]         DATA_FREE,
[INFO] [stdout]         AUTO_INCREMENT,
[INFO] [stdout]         CREATE_TIME,
[INFO] [stdout]         UPDATE_TIME,
[INFO] [stdout]         CHECK_TIME,
[INFO] [stdout]         TABLE_COLLATION,
[INFO] [stdout]         `CHECKSUM`,
[INFO] [stdout]         CREATE_OPTIONS,
[INFO] [stdout]         TABLE_COMMENT
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.`TABLES`
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         CREATE_TIME;
[INFO] [stdout]     ")]
[INFO] [stdout]     pub fn tables(arg : & rbson :: Bson, _tag : char) {} let(mut sql, rb_args)
[INFO] [stdout]     = tables(& rbson :: Bson :: Document(rb_arg_map), sql_tag) ;
[INFO] [stdout]     driver_type.do_replace_tag(& mut sql) ; use rbatis :: executor ::
[INFO] [stdout]     { Executor, ExecutorMut } ; RB.fetch(& sql, rb_args).await
[INFO] [stdout] }
[INFO] [stdout] ............gen macro py_sql end............
[INFO] [stdout] py_sql:
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         TABLE_TYPE,
[INFO] [stdout]         `ENGINE`,
[INFO] [stdout]         VERSION,
[INFO] [stdout]         ROW_FORMAT,
[INFO] [stdout]         TABLE_ROWS,
[INFO] [stdout]         AVG_ROW_LENGTH,
[INFO] [stdout]         DATA_LENGTH,
[INFO] [stdout]         MAX_DATA_LENGTH,
[INFO] [stdout]         INDEX_LENGTH,
[INFO] [stdout]         DATA_FREE,
[INFO] [stdout]         AUTO_INCREMENT,
[INFO] [stdout]         CREATE_TIME,
[INFO] [stdout]         UPDATE_TIME,
[INFO] [stdout]         CHECK_TIME,
[INFO] [stdout]         TABLE_COLLATION,
[INFO] [stdout]         `CHECKSUM`,
[INFO] [stdout]         CREATE_OPTIONS,
[INFO] [stdout]         TABLE_COMMENT
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.`TABLES`
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         CREATE_TIME;
[INFO] [stdout]     
[INFO] [stdout] html:<mapper><update id="tables"> SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = ( SELECT DATABASE ())<if test="table_names != ''"> AND FIND_IN_SET(TABLE_NAME, #{table_names})</if> ORDER BY CREATE_TIME; </update></mapper>
[INFO] [stdout] load html:[
[INFO] [stdout]      {
[INFO] [stdout]         tag: "update",
[INFO] [stdout]         attributes: {
[INFO] [stdout]             "id": "tables",
[INFO] [stdout]         },
[INFO] [stdout]         childs: [
[INFO] [stdout]              {
[INFO] [stdout]                 data: "SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = ( SELECT DATABASE ())",
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 tag: "if",
[INFO] [stdout]                 attributes: {
[INFO] [stdout]                     "test": "table_names != ''",
[INFO] [stdout]                 },
[INFO] [stdout]                 childs: [
[INFO] [stdout]                      {
[INFO] [stdout]                         data: "AND FIND_IN_SET(TABLE_NAME, #{table_names})",
[INFO] [stdout]                     },
[INFO] [stdout]                 ],
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 data: "ORDER BY CREATE_TIME;",
[INFO] [stdout]             },
[INFO] [stdout]         ],
[INFO] [stdout]     },
[INFO] [stdout] ]
[INFO] [stdout] ............gen rb_pysql_fn:
[INFO] [stdout]  use rbatis_sql :: ops :: * ; pub fn tables(arg : & rbson :: Bson, _tag : char)
[INFO] [stdout] -> (String, Vec < rbson :: Bson >)
[INFO] [stdout] {
[INFO] [stdout]     use rbatis_sql :: ops :: AsProxy ; let mut sql = String ::
[INFO] [stdout]     with_capacity(1000) ; let mut args = Vec :: with_capacity(20) ;
[INFO] [stdout]     sql.push_str("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, `ENGINE`, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT, CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, `CHECKSUM`, CREATE_OPTIONS, TABLE_COMMENT FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = ( SELECT DATABASE ())")
[INFO] [stdout]     ; let dGFibGVfbmFtZXMgIT0gJyc_ =
[INFO] [stdout]     { let result = { (arg.index("table_names")).op_ne(& "") } ; result } ; if
[INFO] [stdout]     dGFibGVfbmFtZXMgIT0gJyc_
[INFO] [stdout]     {
[INFO] [stdout]         sql.push_str(" ") ; let c2VsZWN0OnRhYmxlX25hbWVz =
[INFO] [stdout]         { let result = { arg.index("table_names") } ; result } ;
[INFO] [stdout]         args.push(rbson :: bson! (c2VsZWN0OnRhYmxlX25hbWVz)) ;
[INFO] [stdout]         sql.push_str("AND FIND_IN_SET(TABLE_NAME, ?)") ;
[INFO] [stdout]     } sql.push_str("ORDER BY CREATE_TIME;") ; rbatis_sql :: sql_index!
[INFO] [stdout]     (sql, _tag) ; return(sql, args) ;
[INFO] [stdout] }
[INFO] [stdout] ............gen rb_pysql_fn end............
[INFO] [stdout] ............gen macro py_sql :
[INFO] [stdout]  pub async fn columns(table_names : & str) -> rbatis :: core :: Result < Vec <
[INFO] [stdout] TableColumn > >
[INFO] [stdout] {
[INFO] [stdout]     let mut sql =
[INFO] [stdout]     "
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         COLUMN_NAME,
[INFO] [stdout]         ORDINAL_POSITION,
[INFO] [stdout]         COLUMN_DEFAULT,
[INFO] [stdout]         IS_NULLABLE,
[INFO] [stdout]         DATA_TYPE,
[INFO] [stdout]         CHARACTER_MAXIMUM_LENGTH,
[INFO] [stdout]         CHARACTER_OCTET_LENGTH,
[INFO] [stdout]         NUMERIC_PRECISION,
[INFO] [stdout]         NUMERIC_SCALE,
[INFO] [stdout]         DATETIME_PRECISION,
[INFO] [stdout]         CHARACTER_SET_NAME,
[INFO] [stdout]         COLLATION_NAME,
[INFO] [stdout]         COLUMN_TYPE,
[INFO] [stdout]         COLUMN_KEY,
[INFO] [stdout]         EXTRA,
[INFO] [stdout]         `PRIVILEGES`,
[INFO] [stdout]         COLUMN_COMMENT,
[INFO] [stdout]         GENERATION_EXPRESSION,
[INFO] [stdout]         SRS_ID
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.COLUMNS
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         ORDINAL_POSITION;
[INFO] [stdout]     ".to_string()
[INFO] [stdout]     ; let mut rb_arg_map = rbson :: Document :: new() ;
[INFO] [stdout]     rb_arg_map.insert("table_names".to_string(), rbson ::
[INFO] [stdout]     to_bson(table_names).unwrap_or_default()) ; {} use rbatis :: executor ::
[INFO] [stdout]     { RbatisRef } ; let driver_type = RB.get_rbatis().driver_type() ? ; use
[INFO] [stdout]     rbatis :: { rbatis_sql, AsSqlTag } ; let sql_tag = driver_type.sql_tag() ;
[INFO] [stdout]     #[rb_py("
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         COLUMN_NAME,
[INFO] [stdout]         ORDINAL_POSITION,
[INFO] [stdout]         COLUMN_DEFAULT,
[INFO] [stdout]         IS_NULLABLE,
[INFO] [stdout]         DATA_TYPE,
[INFO] [stdout]         CHARACTER_MAXIMUM_LENGTH,
[INFO] [stdout]         CHARACTER_OCTET_LENGTH,
[INFO] [stdout]         NUMERIC_PRECISION,
[INFO] [stdout]         NUMERIC_SCALE,
[INFO] [stdout]         DATETIME_PRECISION,
[INFO] [stdout]         CHARACTER_SET_NAME,
[INFO] [stdout]         COLLATION_NAME,
[INFO] [stdout]         COLUMN_TYPE,
[INFO] [stdout]         COLUMN_KEY,
[INFO] [stdout]         EXTRA,
[INFO] [stdout]         `PRIVILEGES`,
[INFO] [stdout]         COLUMN_COMMENT,
[INFO] [stdout]         GENERATION_EXPRESSION,
[INFO] [stdout]         SRS_ID
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.COLUMNS
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         ORDINAL_POSITION;
[INFO] [stdout]     ")]
[INFO] [stdout]     pub fn columns(arg : & rbson :: Bson, _tag : char) {}
[INFO] [stdout]     let(mut sql, rb_args) =
[INFO] [stdout]     columns(& rbson :: Bson :: Document(rb_arg_map), sql_tag) ;
[INFO] [stdout]     driver_type.do_replace_tag(& mut sql) ; use rbatis :: executor ::
[INFO] [stdout]     { Executor, ExecutorMut } ; RB.fetch(& sql, rb_args).await
[INFO] [stdout] }
[INFO] [stdout] ............gen macro py_sql end............
[INFO] [stdout] py_sql:
[INFO] [stdout]     SELECT
[INFO] [stdout]         TABLE_CATALOG,
[INFO] [stdout]         TABLE_SCHEMA,
[INFO] [stdout]         TABLE_NAME,
[INFO] [stdout]         COLUMN_NAME,
[INFO] [stdout]         ORDINAL_POSITION,
[INFO] [stdout]         COLUMN_DEFAULT,
[INFO] [stdout]         IS_NULLABLE,
[INFO] [stdout]         DATA_TYPE,
[INFO] [stdout]         CHARACTER_MAXIMUM_LENGTH,
[INFO] [stdout]         CHARACTER_OCTET_LENGTH,
[INFO] [stdout]         NUMERIC_PRECISION,
[INFO] [stdout]         NUMERIC_SCALE,
[INFO] [stdout]         DATETIME_PRECISION,
[INFO] [stdout]         CHARACTER_SET_NAME,
[INFO] [stdout]         COLLATION_NAME,
[INFO] [stdout]         COLUMN_TYPE,
[INFO] [stdout]         COLUMN_KEY,
[INFO] [stdout]         EXTRA,
[INFO] [stdout]         `PRIVILEGES`,
[INFO] [stdout]         COLUMN_COMMENT,
[INFO] [stdout]         GENERATION_EXPRESSION,
[INFO] [stdout]         SRS_ID
[INFO] [stdout]     FROM
[INFO] [stdout]         information_schema.COLUMNS
[INFO] [stdout]     WHERE
[INFO] [stdout]         TABLE_SCHEMA = (
[INFO] [stdout]         SELECT
[INFO] [stdout]             DATABASE ())
[INFO] [stdout]     if table_names != '':
[INFO] [stdout]         AND FIND_IN_SET(TABLE_NAME, #{table_names})
[INFO] [stdout]     ORDER BY
[INFO] [stdout]         ORDINAL_POSITION;
[INFO] [stdout]     
[INFO] [stdout] html:<mapper><update id="columns"> SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ( SELECT DATABASE ())<if test="table_names != ''"> AND FIND_IN_SET(TABLE_NAME, #{table_names})</if> ORDER BY ORDINAL_POSITION; </update></mapper>
[INFO] [stdout] load html:[
[INFO] [stdout]      {
[INFO] [stdout]         tag: "update",
[INFO] [stdout]         attributes: {
[INFO] [stdout]             "id": "columns",
[INFO] [stdout]         },
[INFO] [stdout]         childs: [
[INFO] [stdout]              {
[INFO] [stdout]                 data: "SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ( SELECT DATABASE ())",
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 tag: "if",
[INFO] [stdout]                 attributes: {
[INFO] [stdout]                     "test": "table_names != ''",
[INFO] [stdout]                 },
[INFO] [stdout]                 childs: [
[INFO] [stdout]                      {
[INFO] [stdout]                         data: "AND FIND_IN_SET(TABLE_NAME, #{table_names})",
[INFO] [stdout]                     },
[INFO] [stdout]                 ],
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 data: "ORDER BY ORDINAL_POSITION;",
[INFO] [stdout]             },
[INFO] [stdout]         ],
[INFO] [stdout]     },
[INFO] [stdout] ]
[INFO] [stdout] ............gen rb_pysql_fn:
[INFO] [stdout]  use rbatis_sql :: ops :: * ; pub fn
[INFO] [stdout] columns(arg : & rbson :: Bson, _tag : char) -> (String, Vec < rbson :: Bson >)
[INFO] [stdout] {
[INFO] [stdout]     use rbatis_sql :: ops :: AsProxy ; let mut sql = String ::
[INFO] [stdout]     with_capacity(1000) ; let mut args = Vec :: with_capacity(20) ;
[INFO] [stdout]     sql.push_str("SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION, CHARACTER_SET_NAME, COLLATION_NAME, COLUMN_TYPE, COLUMN_KEY, EXTRA, `PRIVILEGES`, COLUMN_COMMENT, GENERATION_EXPRESSION, SRS_ID FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ( SELECT DATABASE ())")
[INFO] [stdout]     ; let dGFibGVfbmFtZXMgIT0gJyc_ =
[INFO] [stdout]     { let result = { (arg.index("table_names")).op_ne(& "") } ; result } ; if
[INFO] [stdout]     dGFibGVfbmFtZXMgIT0gJyc_
[INFO] [stdout]     {
[INFO] [stdout]         sql.push_str(" ") ; let c2VsZWN0OnRhYmxlX25hbWVz =
[INFO] [stdout]         { let result = { arg.index("table_names") } ; result } ;
[INFO] [stdout]         args.push(rbson :: bson! (c2VsZWN0OnRhYmxlX25hbWVz)) ;
[INFO] [stdout]         sql.push_str("AND FIND_IN_SET(TABLE_NAME, ?)") ;
[INFO] [stdout]     } sql.push_str("ORDER BY ORDINAL_POSITION;") ; rbatis_sql :: sql_index!
[INFO] [stdout]     (sql, _tag) ; return(sql, args) ;
[INFO] [stdout] }
[INFO] [stdout] ............gen rb_pysql_fn end............
[INFO] [stdout] ............gen impl CRUDTable:
[INFO] [stdout]  /// 表信息来自 sqlite_master
[INFO] [stdout] #[derive(Serialize, Deserialize, Default, Debug)]
[INFO] [stdout] #[serde(rename_all(deserialize = "SCREAMING_SNAKE_CASE"))] pub struct Table
[INFO] [stdout] {
[INFO] [stdout]     /// 项目的类型：table，index，view，trigger
[INFO] [stdout]     r#type : Option < String >, /// 项目的名称
[INFO] [stdout]     name : Option < String >,
[INFO] [stdout]     /// 所从属的表名，如索引所在的表名
[INFO] [stdout]     tbl_name : Option < String >, /// 项目在数据库页中存储的编号
[INFO] [stdout]     rootpage : Option < i64 >, /// SQL语句
[INFO] [stdout]     sql : Option < String >,
[INFO] [stdout] } impl rbatis :: crud :: CRUDTable for Table
[INFO] [stdout] {
[INFO] [stdout]     fn get(& self, column : & str) -> rbson :: Bson
[INFO] [stdout]     {
[INFO] [stdout]         return match column
[INFO] [stdout]         {
[INFO] [stdout]             "r#type" | "type" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.r#type).unwrap_or_default() ; }
[INFO] [stdout]             "name" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.name).unwrap_or_default() ; }
[INFO] [stdout]             "tbl_name" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.tbl_name).unwrap_or_default() ; }
[INFO] [stdout]             "rootpage" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.rootpage).unwrap_or_default() ; }
[INFO] [stdout]             "sql" =>
[INFO] [stdout]             { return rbson :: to_bson(& self.sql).unwrap_or_default() ; } _ =>
[INFO] [stdout]             { rbson :: Bson :: Null }
[INFO] [stdout]         }
[INFO] [stdout]     } fn table_name() -> String { "table".to_string() } fn table_columns() ->
[INFO] [stdout]     String { "type,name,tbl_name,rootpage,sql".to_string() } fn
[INFO] [stdout]     formats(driver_type : & rbatis :: core :: db :: DriverType) -> std ::
[INFO] [stdout]     collections :: HashMap < String, String >
[INFO] [stdout]     {
[INFO] [stdout]         let mut m : std :: collections :: HashMap < String, String > = std ::
[INFO] [stdout]         collections :: HashMap :: new() ; match driver_type
[INFO] [stdout]         {
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mysql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Postgres => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Sqlite => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: Mssql => { return m ; },
[INFO] [stdout]             rbatis :: core :: db :: DriverType :: None => { return m ; },
[INFO] [stdout]         }
[INFO] [stdout]     }
[INFO] [stdout] }
[INFO] [stdout] ............gen impl CRUDTable end............
[INFO] [stdout] ............gen macro py_sql :
[INFO] [stdout]  pub async fn tables(table_names : & [& str]) -> rbatis :: core :: Result < Vec
[INFO] [stdout] < Table > >
[INFO] [stdout] {
[INFO] [stdout]     let mut sql =
[INFO] [stdout]     "
[INFO] [stdout]     SELECT type, name, tbl_name, rootpage, sql
[INFO] [stdout]     FROM sqlite_master
[INFO] [stdout]     WHERE type = 'table'
[INFO] [stdout]         AND (
[INFO] [stdout]         1 = 2
[INFO] [stdout]     trim ',': for item in table_names:
[INFO] [stdout]         OR name = '#{item}'
[INFO] [stdout]         )
[INFO] [stdout]     ORDER by rootpage;
[INFO] [stdout]     ".to_string()
[INFO] [stdout]     ; let mut rb_arg_map = rbson :: Document :: new() ;
[INFO] [stdout]     rb_arg_map.insert("table_names".to_string(), rbson ::
[INFO] [stdout]     to_bson(table_names).unwrap_or_default()) ; {} use rbatis :: executor ::
[INFO] [stdout]     { RbatisRef } ; let driver_type = RB.get_rbatis().driver_type() ? ; use
[INFO] [stdout]     rbatis :: { rbatis_sql, AsSqlTag } ; let sql_tag = driver_type.sql_tag() ;
[INFO] [stdout]     #[rb_py("
[INFO] [stdout]     SELECT type, name, tbl_name, rootpage, sql
[INFO] [stdout]     FROM sqlite_master
[INFO] [stdout]     WHERE type = 'table'
[INFO] [stdout]         AND (
[INFO] [stdout]         1 = 2
[INFO] [stdout]     trim ',': for item in table_names:
[INFO] [stdout]         OR name = '#{item}'
[INFO] [stdout]         )
[INFO] [stdout]     ORDER by rootpage;
[INFO] [stdout]     ")]
[INFO] [stdout]     pub fn tables(arg : & rbson :: Bson, _tag : char) {} let(mut sql, rb_args)
[INFO] [stdout]     = tables(& rbson :: Bson :: Document(rb_arg_map), sql_tag) ;
[INFO] [stdout]     driver_type.do_replace_tag(& mut sql) ; use rbatis :: executor ::
[INFO] [stdout]     { Executor, ExecutorMut } ; RB.fetch(& sql, rb_args).await
[INFO] [stdout] }
[INFO] [stdout] ............gen macro py_sql end............
[INFO] [stdout] py_sql:
[INFO] [stdout]     SELECT type, name, tbl_name, rootpage, sql
[INFO] [stdout]     FROM sqlite_master
[INFO] [stdout]     WHERE type = 'table'
[INFO] [stdout]         AND (
[INFO] [stdout]         1 = 2
[INFO] [stdout]     trim ',': for item in table_names:
[INFO] [stdout]         OR name = '#{item}'
[INFO] [stdout]         )
[INFO] [stdout]     ORDER by rootpage;
[INFO] [stdout]     
[INFO] [stdout] html:<mapper><update id="tables"> SELECT type, name, tbl_name, rootpage, sql FROM sqlite_master WHERE type = 'table' AND ( 1 = 2<trim prefixOverrides="," suffixOverrides=","><foreach collection="table_names" index="" item="item" > OR name = '#{item}' )</foreach></trim> ORDER by rootpage; </update></mapper>
[INFO] [stdout] load html:[
[INFO] [stdout]      {
[INFO] [stdout]         tag: "update",
[INFO] [stdout]         attributes: {
[INFO] [stdout]             "id": "tables",
[INFO] [stdout]         },
[INFO] [stdout]         childs: [
[INFO] [stdout]              {
[INFO] [stdout]                 data: "SELECT type, name, tbl_name, rootpage, sql FROM sqlite_master WHERE type = 'table' AND ( 1 = 2",
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 tag: "trim",
[INFO] [stdout]                 attributes: {
[INFO] [stdout]                     "prefixOverrides": ",",
[INFO] [stdout]                     "suffixOverrides": ",",
[INFO] [stdout]                 },
[INFO] [stdout]                 childs: [
[INFO] [stdout]                      {
[INFO] [stdout]                         tag: "foreach",
[INFO] [stdout]                         attributes: {
[INFO] [stdout]                             "index": "",
[INFO] [stdout]                             "collection": "table_names",
[INFO] [stdout]                             "item": "item",
[INFO] [stdout]                         },
[INFO] [stdout]                         childs: [
[INFO] [stdout]                              {
[INFO] [stdout]                                 data: "OR name = '#{item}' )",
[INFO] [stdout]                             },
[INFO] [stdout]                         ],
[INFO] [stdout]                     },
[INFO] [stdout]                 ],
[INFO] [stdout]             },
[INFO] [stdout]              {
[INFO] [stdout]                 data: "ORDER by rootpage;",
[INFO] [stdout]             },
[INFO] [stdout]         ],
[INFO] [stdout]     },
[INFO] [stdout] ]
[INFO] [stdout] ............gen rb_pysql_fn:
[INFO] [stdout]  use rbatis_sql :: ops :: * ; pub fn tables(arg : & rbson :: Bson, _tag : char)
[INFO] [stdout] -> (String, Vec < rbson :: Bson >)
[INFO] [stdout] {
[INFO] [stdout]     use rbatis_sql :: ops :: AsProxy ; let mut sql = String ::
[INFO] [stdout]     with_capacity(1000) ; let mut args = Vec :: with_capacity(20) ;
[INFO] [stdout]     sql.push_str("SELECT type, name, tbl_name, rootpage, sql FROM sqlite_master WHERE type = 'table' AND ( 1 = 2")
[INFO] [stdout]     ; sql.push_str("") ;
[INFO] [stdout]     sql.push_str(&
[INFO] [stdout]     {
[INFO] [stdout]         let mut sql = String :: new() ; let c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_ =
[INFO] [stdout]         { let result = { arg.index("table_names") } ; result } ;
[INFO] [stdout]         sql.push_str(" ") ; if c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_.is_array()
[INFO] [stdout]         {
[INFO] [stdout]             let mut index = 0 ;
[INFO] [stdout]             {
[INFO] [stdout]                 let foreach_arr =
[INFO] [stdout]                 c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_.array().unwrap() ; for item
[INFO] [stdout]                 in foreach_arr
[INFO] [stdout]                 {
[INFO] [stdout]                     let item = item ; let Zm9yZWFjaDppdGVt =
[INFO] [stdout]                     { let result = { item } ; result } ;
[INFO] [stdout]                     args.push(rbson :: bson! (Zm9yZWFjaDppdGVt)) ;
[INFO] [stdout]                     sql.push_str("OR name = '?' )") ; index = index + 1 ;
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]         } else if c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_.is_object()
[INFO] [stdout]         {
[INFO] [stdout]             {
[INFO] [stdout]                 let foreach_arr =
[INFO] [stdout]                 c2VsZWN0OnRyaW06dGFibGVfbmFtZXM_.object().unwrap() ;
[INFO] [stdout]                 for(index, item) in foreach_arr
[INFO] [stdout]                 {
[INFO] [stdout]                     let item = item ; let Zm9yZWFjaDppdGVt =
[INFO] [stdout]                     { let result = { item } ; result } ;
[INFO] [stdout]                     args.push(rbson :: bson! (Zm9yZWFjaDppdGVt)) ;
[INFO] [stdout]                     sql.push_str("OR name = '?' )") ;
[INFO] [stdout]                 }
[INFO] [stdout]             }
[INFO] [stdout]         } sql = sql.trim_start_matches(",").trim_end_matches(",").to_string()
[INFO] [stdout]         ; sql
[INFO] [stdout]     }) ; sql.push_str("") ; sql.push_str("ORDER by rootpage;") ; rbatis_sql ::
[INFO] [stdout]     sql_index! (sql, _tag) ; return(sql, args) ;
[INFO] [stdout] }
[INFO] [stdout] ............gen rb_pysql_fn end............
[INFO] [stdout] ............gen macro py_sql :
[INFO] [stdout]  pub async fn columns(table_name : & str) -> rbatis :: core :: Result < Vec <
[INFO] [stdout] TableColumn > >
[INFO] [stdout] {
[INFO] [stdout]     let mut sql = "
[INFO] [stdout]     pragma table_info('#{table_names}');
[INFO] [stdout]     ".to_string()
[INFO] [stdout]     ; let mut rb_arg_map = rbson :: Document :: new() ;
[INFO] [stdout]     rb_arg_map.insert("table_name".to_string(), rbson ::
[INFO] [stdout]     to_bson(table_name).unwrap_or_default()) ; {} use rbatis :: executor ::
[INFO] [stdout]     { RbatisRef } ; let driver_type = RB.get_rbatis().driver_type() ? ; use
[INFO] [stdout]     rbatis :: { rbatis_sql, AsSqlTag } ; let sql_tag = driver_type.sql_tag() ;
[INFO] [stdout]     #[rb_py("
[INFO] [stdout]     pragma table_info('#{table_names}');
[INFO] [stdout]     ")] pub fn
[INFO] [stdout]     columns(arg : & rbson :: Bson, _tag : char) {} let(mut sql, rb_args) =
[INFO] [stdout]     columns(& rbson :: Bson :: Document(rb_arg_map), sql_tag) ;
[INFO] [stdout]     driver_type.do_replace_tag(& mut sql) ; use rbatis :: executor ::
[INFO] [stdout]     { Executor, ExecutorMut } ; RB.fetch(& sql, rb_args).await
[INFO] [stdout] }
[INFO] [stdout] ............gen macro py_sql end............
[INFO] [stdout] py_sql:
[INFO] [stdout]     pragma table_info('#{table_names}');
[INFO] [stdout]     
[INFO] [stdout] html:<mapper><update id="columns"> pragma table_info('#{table_names}'); </update></mapper>
[INFO] [stdout] load html:[
[INFO] [stdout]      {
[INFO] [stdout]         tag: "update",
[INFO] [stdout]         attributes: {
[INFO] [stdout]             "id": "columns",
[INFO] [stdout]         },
[INFO] [stdout]         childs: [
[INFO] [stdout]              {
[INFO] [stdout]                 data: "pragma table_info('#{table_names}');",
[INFO] [stdout]             },
[INFO] [stdout]         ],
[INFO] [stdout]     },
[INFO] [stdout] ]
[INFO] [stdout] ............gen rb_pysql_fn:
[INFO] [stdout]  use rbatis_sql :: ops :: * ; pub fn
[INFO] [stdout] columns(arg : & rbson :: Bson, _tag : char) -> (String, Vec < rbson :: Bson >)
[INFO] [stdout] {
[INFO] [stdout]     use rbatis_sql :: ops :: AsProxy ; let mut sql = String ::
[INFO] [stdout]     with_capacity(1000) ; let mut args = Vec :: with_capacity(20) ; let
[INFO] [stdout]     c2VsZWN0OnRhYmxlX25hbWVz =
[INFO] [stdout]     { let result = { arg.index("table_names") } ; result } ;
[INFO] [stdout]     args.push(rbson :: bson! (c2VsZWN0OnRhYmxlX25hbWVz)) ;
[INFO] [stdout]     sql.push_str("pragma table_info('?');") ; rbatis_sql :: sql_index!
[INFO] [stdout]     (sql, _tag) ; return(sql, args) ;
[INFO] [stdout] }
[INFO] [stdout] ............gen rb_pysql_fn end............
[INFO] [stderr]     Finished test [unoptimized + debuginfo] target(s) in 23.33s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: nom v5.1.2, quick-xml v0.19.0
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
[INFO] running `Command { std: "docker" "inspect" "73e8017994f9ee6d9044001bc742d44a7d7b7de30296e125ed11a6812fd770ef", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "73e8017994f9ee6d9044001bc742d44a7d7b7de30296e125ed11a6812fd770ef", kill_on_drop: false }`
[INFO] [stdout] 73e8017994f9ee6d9044001bc742d44a7d7b7de30296e125ed11a6812fd770ef
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:5ff2268d62e97bff2cde7d5815dd6ed5b47097566f13b8d0ca110b04b60e07ed" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2023-04-20" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 2d687f730adfef9401e8531304a854bfdae77c25a3eb8c808d07fb9802331ce5
[INFO] running `Command { std: "docker" "start" "-a" "2d687f730adfef9401e8531304a854bfdae77c25a3eb8c808d07fb9802331ce5", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `ConfigUtil`
[INFO] [stderr]  --> crab-service/src/user.rs:5:18
[INFO] [stderr]   |
[INFO] [stderr] 5 | use crab_cache::{ConfigUtil, RedisCache};
[INFO] [stderr]   |                  ^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `code`
[INFO] [stderr]   --> crab-service/src/user.rs:27:9
[INFO] [stderr]    |
[INFO] [stderr] 27 |         code: Option<String>,
[INFO] [stderr]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_code`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `uuid`
[INFO] [stderr]   --> crab-service/src/user.rs:28:9
[INFO] [stderr]    |
[INFO] [stderr] 28 |         uuid: Option<String>,
[INFO] [stderr]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_uuid`
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `verify_captcha` is never used
[INFO] [stderr]    --> crab-service/src/user.rs:138:14
[INFO] [stderr]     |
[INFO] [stderr] 21  | impl SysLoginSrv {
[INFO] [stderr]     | ---------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 138 |     async fn verify_captcha(
[INFO] [stderr]     |              ^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `crab-service` (lib) generated 4 warnings (run `cargo fix --lib -p crab-service` to apply 3 suggestions)
[INFO] [stderr] warning: fields `id`, `roles`, `del`, and `date` are never read
[INFO] [stderr]   --> crab-excel/tests/excel_writer.rs:7:5
[INFO] [stderr]    |
[INFO] [stderr] 5  | struct TestExcel {
[INFO] [stderr]    |        --------- fields in this struct
[INFO] [stderr] 6  |     #[excel_col(name = "用户ID", sort = 1)]
[INFO] [stderr] 7  |     id: u32,
[INFO] [stderr]    |     ^^
[INFO] [stderr] ...
[INFO] [stderr] 11 |     roles: Vec<u32>,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 12 |     #[excel_col(name = "是否删除", sort = 2)]
[INFO] [stderr] 13 |     del: u8,
[INFO] [stderr]    |     ^^^
[INFO] [stderr] 14 |     #[excel_col(sort = 1, name = "日期")]
[INFO] [stderr] 15 |     date: u128,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TestExcel` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]  --> crab-excel/tests/excel_writer.rs:4:26
[INFO] [stderr]   |
[INFO] [stderr] 4 | #[derive(Debug, Default, ExcelWriter)]
[INFO] [stderr]   |                          ^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]   = note: `#[warn(unused_must_use)]` on by default
[INFO] [stderr]   = note: this warning originates in the derive macro `ExcelWriter` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: `crab-excel` (test "excel_writer") generated 2 warnings
[INFO] [stderr] warning: `crab-service` (lib test) generated 4 warnings (4 duplicates)
[INFO] [stderr]     Finished test [unoptimized + debuginfo] target(s) in 0.74s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: nom v5.1.2, quick-xml v0.19.0
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1`
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/crab_admin-7feff13c5a4f509f)
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/crab_admin-bc1219e335aaa2a9)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/crab_cache-9786b4a94b8bad6c)
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/crab_common-7ad16b825596c2c1)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test enums::test::test_user_status ... ok
[INFO] [stdout] test enums::test::test_http_method ... ok
[INFO] [stdout] test jwt::test::verify ... FAILED
[INFO] [stdout] test jwt::test::encode ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- jwt::test::verify stdout ----
[INFO] [stdout] thread 'jwt::test::verify' panicked at 'called `Result::unwrap()` on an `Err` value: JwtError("InvalidToken other errors")', crab-common/src/jwt.rs:85:50
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x562e272304aa - std::backtrace_rs::backtrace::libunwind::trace::h2f05d0192276a8f6
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
[INFO] [stdout]    1:     0x562e272304aa - std::backtrace_rs::backtrace::trace_unsynchronized::hedc23dff7a1af150
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
[INFO] [stdout]    2:     0x562e272304aa - std::sys_common::backtrace::_print_fmt::h17541ef7592f3ce2
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:65:5
[INFO] [stdout]    3:     0x562e272304aa - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h20f75df5ab0c0792
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:44:22
[INFO] [stdout]    4:     0x562e2725593f - core::fmt::write::h78109e6f466b3af6
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/fmt/mod.rs:1254:17
[INFO] [stdout]    5:     0x562e2722d7f5 - std::io::Write::write_fmt::hd24bfb68a1b35a25
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/io/mod.rs:1698:15
[INFO] [stdout]    6:     0x562e27230275 - std::sys_common::backtrace::_print::h8dac57a9f8fbf9a5
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:47:5
[INFO] [stdout]    7:     0x562e27230275 - std::sys_common::backtrace::print::hf9ecbf41d1aa712f
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:34:9
[INFO] [stdout]    8:     0x562e27231f2e - std::panicking::default_hook::{{closure}}::h04c07acfc84ca028
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:269:22
[INFO] [stdout]    9:     0x562e27231c61 - std::panicking::default_hook::h01f6bb23e1eceb2c
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:285:9
[INFO] [stdout]   10:     0x562e270a9d4b - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h87fe9f7b2fd49e4c
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1987:9
[INFO] [stdout]   11:     0x562e270a9d4b - test::test_main::{{closure}}::he94d679243a7531b
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:134:21
[INFO] [stdout]   12:     0x562e27232614 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h3f2d6d8b14c4769f
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1987:9
[INFO] [stdout]   13:     0x562e27232614 - std::panicking::rust_panic_with_hook::h2bb3722bbaf2f6df
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:695:13
[INFO] [stdout]   14:     0x562e27232389 - std::panicking::begin_panic_handler::{{closure}}::h91bc7f36a4be011b
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:582:13
[INFO] [stdout]   15:     0x562e27230916 - std::sys_common::backtrace::__rust_end_short_backtrace::h8b3d3717114f9e59
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:150:18
[INFO] [stdout]   16:     0x562e272320e2 - rust_begin_unwind
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:578:5
[INFO] [stdout]   17:     0x562e27056c33 - core::panicking::panic_fmt::hfd368e3fbdabea26
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/panicking.rs:67:14
[INFO] [stdout]   18:     0x562e270571d3 - core::result::unwrap_failed::he54eb4b2f125b26f
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/result.rs:1687:5
[INFO] [stdout]   19:     0x562e27062ce9 - core::result::Result<T,E>::unwrap::h8b1a9d4c009f22e7
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/result.rs:1089:23
[INFO] [stdout]   20:     0x562e2707432c - crab_common::jwt::test::verify::hf9a0ec436d52b8fc
[INFO] [stdout]                                at /opt/rustwide/workdir/crab-common/src/jwt.rs:85:24
[INFO] [stdout]   21:     0x562e27074127 - crab_common::jwt::test::verify::{{closure}}::hec764f4d7bcab262
[INFO] [stdout]                                at /opt/rustwide/workdir/crab-common/src/jwt.rs:76:17
[INFO] [stdout]   22:     0x562e27065585 - core::ops::function::FnOnce::call_once::hf9190cc81ccb01d8
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x562e270aec1f - core::ops::function::FnOnce::call_once::ha6a70e79f7481a7e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x562e270aec1f - test::__rust_begin_short_backtrace::hce33033019b61e69
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:655:18
[INFO] [stdout]   25:     0x562e2707c40c - test::run_test::{{closure}}::h858d3528838ae3e5
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:646:30
[INFO] [stdout]   26:     0x562e2707c40c - core::ops::function::FnOnce::call_once{{vtable.shim}}::he8ac2b00f01ae79e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   27:     0x562e270adcf6 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h8093d25b522725ef
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1973:9
[INFO] [stdout]   28:     0x562e270adcf6 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h5c334c204e4a3913
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/panic/unwind_safe.rs:271:9
[INFO] [stdout]   29:     0x562e270adcf6 - std::panicking::try::do_call::ha8b740c7b9478074
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:485:40
[INFO] [stdout]   30:     0x562e270adcf6 - std::panicking::try::h5d34f63d0e41b64e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:449:19
[INFO] [stdout]   31:     0x562e270adcf6 - std::panic::catch_unwind::hcfbb511e1aa7fc67
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panic.rs:140:14
[INFO] [stdout]   32:     0x562e270adcf6 - test::run_test_in_process::h9abda90f802eaf21
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:678:27
[INFO] [stdout]   33:     0x562e270adcf6 - test::run_test::run_test_inner::{{closure}}::h0f058de91f6c6edf
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:572:39
[INFO] [stdout]   34:     0x562e27076c15 - test::run_test::run_test_inner::{{closure}}::h5ca48a4c59c6c1fb
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:599:37
[INFO] [stdout]   35:     0x562e27076c15 - std::sys_common::backtrace::__rust_begin_short_backtrace::h32bd51e1495d4a33
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:134:18
[INFO] [stdout]   36:     0x562e2707c151 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::hc086fae9b128b2db
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/thread/mod.rs:526:17
[INFO] [stdout]   37:     0x562e2707c151 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hb66571888d270d43
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/panic/unwind_safe.rs:271:9
[INFO] [stdout]   38:     0x562e2707c151 - std::panicking::try::do_call::h4fa2ef4f6e51fecf
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:485:40
[INFO] [stdout]   39:     0x562e2707c151 - std::panicking::try::h1e9e22b8584489b5
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:449:19
[INFO] [stdout]   40:     0x562e2707c151 - std::panic::catch_unwind::h44698a3de0e0769e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panic.rs:140:14
[INFO] [stdout]   41:     0x562e2707c151 - std::thread::Builder::spawn_unchecked_::{{closure}}::h50153abde3fe239e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/thread/mod.rs:525:30
[INFO] [stdout]   42:     0x562e2707c151 - core::ops::function::FnOnce::call_once{{vtable.shim}}::hbe5bbf6f38394364
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   43:     0x562e27236ae5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h0d83cb2920a49046
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1973:9
[INFO] [stdout]   44:     0x562e27236ae5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hbe0a008aa7d9ef59
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1973:9
[INFO] [stdout]   45:     0x562e27236ae5 - std::sys::unix::thread::Thread::new::thread_start::h3a466996bdf6b1f9
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys/unix/thread.rs:108:17
[INFO] [stdout]   46:     0x7f4708db3b43 - <unknown>
[INFO] [stdout]   47:     0x7f4708e44bb4 - __clone
[INFO] [stdout]   48:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- jwt::test::encode stdout ----
[INFO] [stdout] App {
[INFO] [stdout]     server: Server {
[INFO] [stdout]         name: Some(
[INFO] [stdout]             "Hairy Crab",
[INFO] [stdout]         ),
[INFO] [stdout]         host: "127.0.0.1",
[INFO] [stdout]         port: 9999,
[INFO] [stdout]     },
[INFO] [stdout]     database_url: "mysql://root:root@localhost:3306/hairy-crab",
[INFO] [stdout]     logic: Some(
[INFO] [stdout]         Logic {
[INFO] [stdout]             column: "del",
[INFO] [stdout]             normal: 0,
[INFO] [stdout]             deleted: 1,
[INFO] [stdout]         },
[INFO] [stdout]     ),
[INFO] [stdout]     redis_url: "redis://127.0.0.1:6379/",
[INFO] [stdout]     log_dir: "target/logs/",
[INFO] [stdout]     jwt_secret: "abcdefghijklmnopqrstuvwxyz",
[INFO] [stdout]     white_list: [
[INFO] [stdout]         "/api/login",
[INFO] [stdout]         "/api/captcha",
[INFO] [stdout]     ],
[INFO] [stdout] }
[INFO] [stdout] thread 'jwt::test::encode' panicked at 'assertion failed: `(left == right)`
[INFO] [stdout]   left: `""`,
[INFO] [stdout]  right: `"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjEsInVzZXJfaWQiOjEsImFjY291bnQiOiJhY2NvdW50IiwicGVybWlzc2lvbnMiOltdLCJyb2xlX2lkcyI6W119.DT281nSSCPBEQoE3EDWz9acjjduJGjeLK7XiclhchX0"`', crab-common/src/jwt.rs:72:9
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x562e272304aa - std::backtrace_rs::backtrace::libunwind::trace::h2f05d0192276a8f6
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
[INFO] [stdout]    1:     0x562e272304aa - std::backtrace_rs::backtrace::trace_unsynchronized::hedc23dff7a1af150
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
[INFO] [stdout]    2:     0x562e272304aa - std::sys_common::backtrace::_print_fmt::h17541ef7592f3ce2
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:65:5
[INFO] [stdout]    3:     0x562e272304aa - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h20f75df5ab0c0792
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:44:22
[INFO] [stdout]    4:     0x562e2725593f - core::fmt::write::h78109e6f466b3af6
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/fmt/mod.rs:1254:17
[INFO] [stdout]    5:     0x562e2722d7f5 - std::io::Write::write_fmt::hd24bfb68a1b35a25
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/io/mod.rs:1698:15
[INFO] [stdout]    6:     0x562e27230275 - std::sys_common::backtrace::_print::h8dac57a9f8fbf9a5
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:47:5
[INFO] [stdout]    7:     0x562e27230275 - std::sys_common::backtrace::print::hf9ecbf41d1aa712f
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:34:9
[INFO] [stdout]    8:     0x562e27231f2e - std::panicking::default_hook::{{closure}}::h04c07acfc84ca028
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:269:22
[INFO] [stdout]    9:     0x562e27231c61 - std::panicking::default_hook::h01f6bb23e1eceb2c
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:285:9
[INFO] [stdout]   10:     0x562e270a9d4b - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h87fe9f7b2fd49e4c
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1987:9
[INFO] [stdout]   11:     0x562e270a9d4b - test::test_main::{{closure}}::he94d679243a7531b
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:134:21
[INFO] [stdout]   12:     0x562e27232614 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h3f2d6d8b14c4769f
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1987:9
[INFO] [stdout]   13:     0x562e27232614 - std::panicking::rust_panic_with_hook::h2bb3722bbaf2f6df
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:695:13
[INFO] [stdout]   14:     0x562e27232389 - std::panicking::begin_panic_handler::{{closure}}::h91bc7f36a4be011b
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:582:13
[INFO] [stdout]   15:     0x562e27230916 - std::sys_common::backtrace::__rust_end_short_backtrace::h8b3d3717114f9e59
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:150:18
[INFO] [stdout]   16:     0x562e272320e2 - rust_begin_unwind
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:578:5
[INFO] [stdout]   17:     0x562e27056c33 - core::panicking::panic_fmt::hfd368e3fbdabea26
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/panicking.rs:67:14
[INFO] [stdout]   18:     0x562e2705705f - core::panicking::assert_failed_inner::haef49168e1798a91
[INFO] [stdout]   19:     0x562e270635be - core::panicking::assert_failed::h02ab8d08dabac51d
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/panicking.rs:228:5
[INFO] [stdout]   20:     0x562e270740f9 - crab_common::jwt::test::encode::h076a531088752ab4
[INFO] [stdout]                                at /opt/rustwide/workdir/crab-common/src/jwt.rs:72:9
[INFO] [stdout]   21:     0x562e27073e97 - crab_common::jwt::test::encode::{{closure}}::he89797d8a043d6a6
[INFO] [stdout]                                at /opt/rustwide/workdir/crab-common/src/jwt.rs:64:17
[INFO] [stdout]   22:     0x562e27065285 - core::ops::function::FnOnce::call_once::h508aefa989c6923b
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x562e270aec1f - core::ops::function::FnOnce::call_once::ha6a70e79f7481a7e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x562e270aec1f - test::__rust_begin_short_backtrace::hce33033019b61e69
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:655:18
[INFO] [stdout]   25:     0x562e2707c40c - test::run_test::{{closure}}::h858d3528838ae3e5
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:646:30
[INFO] [stdout]   26:     0x562e2707c40c - core::ops::function::FnOnce::call_once{{vtable.shim}}::he8ac2b00f01ae79e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   27:     0x562e270adcf6 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h8093d25b522725ef
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1973:9
[INFO] [stdout]   28:     0x562e270adcf6 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h5c334c204e4a3913
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/panic/unwind_safe.rs:271:9
[INFO] [stdout]   29:     0x562e270adcf6 - std::panicking::try::do_call::ha8b740c7b9478074
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:485:40
[INFO] [stdout]   30:     0x562e270adcf6 - std::panicking::try::h5d34f63d0e41b64e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:449:19
[INFO] [stdout]   31:     0x562e270adcf6 - std::panic::catch_unwind::hcfbb511e1aa7fc67
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panic.rs:140:14
[INFO] [stdout]   32:     0x562e270adcf6 - test::run_test_in_process::h9abda90f802eaf21
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:678:27
[INFO] [stdout]   33:     0x562e270adcf6 - test::run_test::run_test_inner::{{closure}}::h0f058de91f6c6edf
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:572:39
[INFO] [stdout]   34:     0x562e27076c15 - test::run_test::run_test_inner::{{closure}}::h5ca48a4c59c6c1fb
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/test/src/lib.rs:599:37
[INFO] [stdout]   35:     0x562e27076c15 - std::sys_common::backtrace::__rust_begin_short_backtrace::h32bd51e1495d4a33
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys_common/backtrace.rs:134:18
[INFO] [stdout]   36:     0x562e2707c151 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::hc086fae9b128b2db
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/thread/mod.rs:526:17
[INFO] [stdout]   37:     0x562e2707c151 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hb66571888d270d43
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/panic/unwind_safe.rs:271:9
[INFO] [stdout]   38:     0x562e2707c151 - std::panicking::try::do_call::h4fa2ef4f6e51fecf
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:485:40
[INFO] [stdout]   39:     0x562e2707c151 - std::panicking::try::h1e9e22b8584489b5
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panicking.rs:449:19
[INFO] [stdout]   40:     0x562e2707c151 - std::panic::catch_unwind::h44698a3de0e0769e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/panic.rs:140:14
[INFO] [stdout]   41:     0x562e2707c151 - std::thread::Builder::spawn_unchecked_::{{closure}}::h50153abde3fe239e
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/thread/mod.rs:525:30
[INFO] [stdout]   42:     0x562e2707c151 - core::ops::function::FnOnce::call_once{{vtable.shim}}::hbe5bbf6f38394364
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   43:     0x562e27236ae5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h0d83cb2920a49046
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1973:9
[INFO] [stdout]   44:     0x562e27236ae5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hbe0a008aa7d9ef59
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/alloc/src/boxed.rs:1973:9
[INFO] [stdout]   45:     0x562e27236ae5 - std::sys::unix::thread::Thread::new::thread_start::h3a466996bdf6b1f9
[INFO] [stdout]                                at /rustc/1b7dd2252b99671ce5d1cb9664c5f8636329436d/library/std/src/sys/unix/thread.rs:108:17
[INFO] [stdout]   46:     0x7f4708db3b43 - <unknown>
[INFO] [stdout]   47:     0x7f4708e44bb4 - __clone
[INFO] [stdout]   48:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     jwt::test::encode
[INFO] [stdout]     jwt::test::verify
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 2 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `-p crab-common --lib`
[INFO] running `Command { std: "docker" "inspect" "2d687f730adfef9401e8531304a854bfdae77c25a3eb8c808d07fb9802331ce5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2d687f730adfef9401e8531304a854bfdae77c25a3eb8c808d07fb9802331ce5", kill_on_drop: false }`
[INFO] [stdout] 2d687f730adfef9401e8531304a854bfdae77c25a3eb8c808d07fb9802331ce5
