ddnet/src/engine/shared/rust_version.rs

60 lines
1.7 KiB
Rust
Raw Normal View History

use super::CFGFLAG_CLIENT;
use super::CFGFLAG_SERVER;
use ddnet_base::s;
use ddnet_base::UserPtr;
use ddnet_engine::gs_ConsoleDefaultColor;
use ddnet_engine::IConsole;
use ddnet_engine::IConsole_FCommandCallback;
use ddnet_engine::IConsole_IResult;
use ddnet_engine::IConsole_OUTPUT_LEVEL_STANDARD;
use std::pin::Pin;
#[cxx::bridge]
mod ffi {
extern "C++" {
include!("base/rust.h");
include!("engine/console.h");
type IConsole = ddnet_engine::IConsole;
}
extern "Rust" {
fn RustVersionPrint(console: &IConsole);
fn RustVersionRegister(console: Pin<&mut IConsole>);
}
}
/// Print the Rust version used for compiling this crate.
///
/// Uses [`IConsole::Print`] for printing.
#[allow(non_snake_case)]
pub fn RustVersionPrint(console: &IConsole) {
console.Print(
IConsole_OUTPUT_LEVEL_STANDARD,
s!("rust_version"),
s!(include_str!(concat!(env!("OUT_DIR"), "/rustc-version"))),
gs_ConsoleDefaultColor,
);
}
#[allow(non_snake_case)]
extern "C" fn PrintRustVersionCallback(_: &IConsole_IResult, user: UserPtr) {
RustVersionPrint(unsafe { user.cast() })
}
/// Register the `rust_version` command to the given console instance.
///
/// This command calls the [`RustVersionPrint`] function to print the Rust
/// version used for compiling this crate.
#[allow(non_snake_case)]
pub fn RustVersionRegister(console: Pin<&mut IConsole>) {
let user = console.as_ref().get_ref().into();
console.Register(
s!("rust_version"),
s!(""),
CFGFLAG_CLIENT | CFGFLAG_SERVER,
IConsole_FCommandCallback(PrintRustVersionCallback),
user,
s!("Prints the Rust version used to compile DDNet"),
);
}