From 83a5d79772e92b3ec92f754ec8ae151c4ac70311 Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Fri, 24 May 2024 09:37:09 -0300 Subject: [PATCH] Fake Abstract classes in Rust --- abstractclasstest/Cargo.lock | 7 +++++++ abstractclasstest/Cargo.toml | 6 ++++++ abstractclasstest/README.md | 3 +++ abstractclasstest/src/main.rs | 30 ++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 abstractclasstest/Cargo.lock create mode 100644 abstractclasstest/Cargo.toml create mode 100644 abstractclasstest/README.md create mode 100644 abstractclasstest/src/main.rs diff --git a/abstractclasstest/Cargo.lock b/abstractclasstest/Cargo.lock new file mode 100644 index 0000000..68069aa --- /dev/null +++ b/abstractclasstest/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "abstractclasstest" +version = "0.1.0" diff --git a/abstractclasstest/Cargo.toml b/abstractclasstest/Cargo.toml new file mode 100644 index 0000000..d2f6ee7 --- /dev/null +++ b/abstractclasstest/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "abstractclasstest" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/abstractclasstest/README.md b/abstractclasstest/README.md new file mode 100644 index 0000000..d2992a6 --- /dev/null +++ b/abstractclasstest/README.md @@ -0,0 +1,3 @@ +# AbstractClassTest + +Trying to do something akin to an abstract class in Rust. diff --git a/abstractclasstest/src/main.rs b/abstractclasstest/src/main.rs new file mode 100644 index 0000000..e76f4eb --- /dev/null +++ b/abstractclasstest/src/main.rs @@ -0,0 +1,30 @@ +trait Base { + fn files(&self) -> Vec; + fn show_files(&self) { + for file in self.files() { + println!("file={file}"); + } + } +} + +struct UpcaseFiles {} +impl Base for UpcaseFiles { + fn files(&self) -> Vec { + vec!["HELLO".into(), "WORLD".into()] + } +} + +struct LowcaseFiles {} +impl Base for LowcaseFiles { + fn files(&self) -> Vec { + vec!["hello".into(), "world".into()] + } +} + +fn main() { + let f1 = UpcaseFiles {}; + f1.show_files(); + + let f2 = LowcaseFiles {}; + f2.show_files() +}