Browse Source

add traits folder :eyes:

Ethosa 3 years ago
parent
commit
fe671a97ab

+ 6 - 0
Languages/Rust/traits/Cargo.toml

@@ -0,0 +1,6 @@
+[package]
+name = "traits"
+version = "0.1.0"
+edition = "2018"
+
+[dependencies]

BIN
Languages/Rust/traits/src/main.pdb


+ 44 - 0
Languages/Rust/traits/src/main.rs

@@ -0,0 +1,44 @@
+trait AsString {
+    fn as_str(&self) -> String;
+}
+
+
+struct VkComment {
+    author: i32,
+    text: String
+}
+
+struct VkPost<'a> {
+    author: i32,
+    text: String,
+    comments: Vec<&'a VkComment>
+}
+
+
+impl AsString for VkComment {
+    fn as_str(&self) -> String {
+        format!("{}: {}", self.author, self.text)
+    }
+}
+
+impl AsString for VkPost<'_> {
+    fn as_str(&self) -> String {
+        let mut result = format!("{}\n{}", self.author, self.text);
+        for comment in &self.comments {
+            let s = format!("\n -- {}", comment.as_str());
+            result.push_str(&s);
+        }
+        result
+    }
+}
+
+
+
+
+fn main() {
+    let comment = VkComment{author: 1, text: String::from("Nice)")};
+    let post = VkPost{author: 205, text: String::from("OK"), comments: vec![&comment]};
+
+    println!("{}", comment.as_str());
+    println!("{}", post.as_str());
+}

+ 0 - 2
Languages/Rust/vec2/Cargo.toml

@@ -3,6 +3,4 @@ name = "vec2"
 version = "0.1.0"
 edition = "2018"
 
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
 [dependencies]

BIN
Languages/Rust/vec2/src/main.pdb