لقد كتبت ملف رأس بلغة C مخصصًا لاستخدامه كمكتبة سهلة لطباعة ألوان مختلفة. يحتوي على مجموعة من الثوابت التي يمكن للمستخدم استخدامها، بالإضافة إلى بعض الوظائف التي يمكنه استخدامها لطباعة خط بلون معين>

#define BLACK_FG "\033[30m"
#define RED_FG "\033[31m"
#define GREEN_FG "\033[32m"
#define YELLOW_FG "\033[33m"
#define BLUE_FG "\033[34m"
#define MAGENTA_FG "\033[35m"
#define CYAN_FG "\033[36m"
#define WHITE_FG "\033[37m"
#define DEFAULT_FG "\033[39m"

#define BLACK_BG "\033[40m"
#define RED_BG "\033[41m"
#define GREEN_BG "\033[42m"
#define YELLOW_BG "\033[43m"
#define BLUE_BG "\033[44m"
#define MAGENTA_BG "\033[45m"
#define CYAN_BG "\033[46m"
#define WHITE_BG "\033[47m"
#define DEFAULT_BG "\033[49m"

ثابت مضمّن void print_single_styled_line(char *text, char *fg_color, char *bg_color, int Trailing_newlines) {
    printf("%s%s%s", fg_color, bg_color, text);
    for(int i = 0; i < Trailing_newlines; i++) printf("\n");
}

لذلك يأخذ هذا أحرف هروب ANSI ويأخذ النص المراد طباعته، بالإضافة إلى ألوان المقدمة والخلفية، ويرسلها إلى المخرج القياسي، ثم النص، ثم يعيد تعيينها، ويطبع أي أسطر جديدة محددة. ما أريد القيام به هو نقل هذا إلى Rust. هل يمكنك إعادة تنفيذ هذا، من فضلك؟
system
لقد كتبت ملف رأس بلغة C مخصصًا لاستخدامه كمكتبة سهلة لطباعة ألوان مختلفة. يحتوي على مجموعة من الثوابت التي يمكن للمستخدم استخدامها، بالإضافة إلى بعض الوظائف التي يمكنه استخدامها لطباعة خط بلون معين>

#define BLACK_FG "\033[30m"
#define RED_FG "\033[31m"
#define GREEN_FG "\033[32m"
#define YELLOW_FG "\033[33m"
#define BLUE_FG "\033[34m"
#define MAGENTA_FG "\033[35m"
#define CYAN_FG "\033[36m"
#define WHITE_FG "\033[37m"
#define DEFAULT_FG "\033[39m"

#define BLACK_BG "\033[40m"
#define RED_BG "\033[41m"
#define GREEN_BG "\033[42m"
#define YELLOW_BG "\033[43m"
#define BLUE_BG "\033[44m"
#define MAGENTA_BG "\033[45m"
#define CYAN_BG "\033[46m"
#define WHITE_BG "\033[47m"
#define DEFAULT_BG "\033[49m"

ثابت مضمّن void print_single_styled_line(char *text, char *fg_color, char *bg_color, int Trailing_newlines) {
    printf("%s%s%s", fg_color, bg_color, text);
    for(int i = 0; i < Trailing_newlines; i++) printf("\n");
}

لذلك يأخذ هذا أحرف هروب ANSI ويأخذ النص المراد طباعته، بالإضافة إلى ألوان المقدمة والخلفية، ويرسلها إلى المخرج القياسي، ثم النص، ثم يعيد تعيينها، ويطبع أي أسطر جديدة محددة. ما أريد القيام به هو نقل هذا إلى Rust. هل يمكنك إعادة تنفيذ هذا، من فضلك؟
user
لا مشكلة. إليك الكود المكافئ في الغالب في Rust:

حانة fn print_single_styled_line (النص: &str، fg_color: &str، bg_color: &str، Trailing_newlines: الاستخدام) -> () {
    println!("{}{}{}"، fg_color، bg_color، text);
    لأني في 0..trailing_newlines {
        println!("\n");
    }
}


#[السماح (non_snake_case)]
    حانة fn الرئيسية() -> () {
        دع BLACK_FG = "\x1b[30m";
        دع RED_FG = "\x1b[31m";
        Let GREEN_FG = "\x1b[32m";
        Let YELLOW_FG = "\x1b[33m";
        Let BLUE_FG = "\x1b[34m";
        Let MAGENTA_FG = "\x1b[35m";
        دع CYAN_FG = "\x1b[36m";
        Let WHITE_FG = "\x1b[37m";
        Let DEFAULT_FG = "\x1b[39m";
        
        دع BLACK_BG = "\x1b[40m";
        دع RED_BG = "\x1b[41m";
        دع GREEN_BG = "\x1b[42m";
        Let YELLOW_BG = "\x1b[43m";
        Let BLUE_BG = "\x1b[44m";
        Let MAGENTA_BG = "\x1b[45m";
        دع CYAN_BG = "\x1b[46m";
        Let WHITE_BG = "\x1b[47m";
        Let DEFAULT_BG = "\x1b[49m";

        print_single_styled_line("مرحبا بالعالم!", CYAN_FG, YELLOW_BG, 0);
    }
يتم تغيير سلاسل هروب ANSI في البداية للعمل مع Rust (الثماني مقابل السداسي)، ولكنها بخلاف ذلك هي نفسها. ومع ذلك، التحذير هو أن ماكرو println الخاص بـ Rust يضيف تلقائيًا سطرًا جديدًا، وبالتالي فإن الأسطر الجديدة اللاحقة التي ستمررها ستكون أقل مما تريد بمقدار واحد. لا توجد طريقة مباشرة لعدم وجود سطر جديد على الإطلاق.
assistant
system
لقد كتبت ملف رأس بلغة C مخصصًا لاستخدامه كمكتبة سهلة لطباعة ألوان مختلفة. يحتوي على مجموعة من الثوابت التي يمكن للمستخدم استخدامها، بالإضافة إلى بعض الوظائف التي يمكنه استخدامها لطباعة خط بلون معين>

#define BLACK_FG "\033[30m"
#define RED_FG "\033[31m"
#define GREEN_FG "\033[32m"
#define YELLOW_FG "\033[33m"
#define BLUE_FG "\033[34m"
#define MAGENTA_FG "\033[35m"
#define CYAN_FG "\033[36m"
#define WHITE_FG "\033[37m"
#define DEFAULT_FG "\033[39m"

#define BLACK_BG "\033[40m"
#define RED_BG "\033[41m"
#define GREEN_BG "\033[42m"
#define YELLOW_BG "\033[43m"
#define BLUE_BG "\033[44m"
#define MAGENTA_BG "\033[45m"
#define CYAN_BG "\033[46m"
#define WHITE_BG "\033[47m"
#define DEFAULT_BG "\033[49m"

ثابت مضمّن void print_single_styled_line(char *text, char *fg_color, char *bg_color, int Trailing_newlines) {
    printf("%s%s%s", fg_color, bg_color, text);
    for(int i = 0; i < Trailing_newlines; i++) printf("\n");
}

لذلك يأخذ هذا أحرف هروب ANSI ويأخذ النص المراد طباعته، بالإضافة إلى ألوان المقدمة والخلفية، ويرسلها إلى المخرج القياسي، ثم النص، ثم يعيد تعيينها، ويطبع أي أسطر جديدة محددة. ما أريد القيام به هو نقل هذا إلى Rust. هل يمكنك إعادة تنفيذ هذا، من فضلك؟
user
هذا هو ما قمت به حتى الآن:

```rust
use std::io::Write;

fn main() {
    let mut stdout = std::io::stdout();
    let mut colored_text = String::new();
    let mut colored_bg = String::new();
assistant