【Rust】複数ファイルで開発する

main

use sha2::{Digest, Sha256};
mod hello;

#[derive(Debug)]
struct Name {
    family: String,
    first: String,
    age: i32,
}

fn main() {
    let n = hello::FamilyName { family: "tanaka".to_string() };
    hello::print_hello();
    println!("{:?}", n);
    let hash = Sha256::digest("hello world");
    println!("{:x}", hash);
}

sub

use sha2::{Digest, Sha256};
use crate::Name;

#[derive(Debug)]
pub struct FamilyName {
    pub family: String,
}

pub fn print_hello() {
    let n = Name {family: "yamada".to_string(), first: "taro".to_string(), age:15};
    let hash = Sha256::digest("hello world");
    println!("hello world! {:?}", n);
    println!("{:x}", hash);
}

hello world! Name { family: “yamada”, first: “taro”, age: 15 }
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
FamilyName { family: “tanaka” }
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

ライブラリの呼び出しは、メイン、サブ両方のヘッダで書くことができる
メインがsubを呼び出す際は、mod hello;、サブがメインを呼び出す際は、use crate::Name;で呼び出せる。

クライアント側

fn main() {
    let coninfo = args[1].to_string() + ":" + &args[2];
    let coninfo = TcpListener::bind(coninfo).expect("COuld not bind");

    let mut stream = TcpStream::connect(coninfo).expect("could not connect to Server");
    loop {
        let mut input = String::new();
        let mut buffer: Vec<u8> = Vec::new();
        io::stdin().read_line(&mut input).expect("Failed to read from stdin");
        stream.write(input.as_bytes()).expect("Failed to write to server");

        let mut reader = BufReader::new(&stream);

        reader.read_until(b'\n', &mut buffer).expect("Could not read intop buffer");
        print!("{}", std::from_utf8(&buffer).expect("Could not write buffer as string"));
    }
}