Skip to content

Instantly share code, notes, and snippets.

@jultabary
Created January 18, 2022 17:19
Show Gist options
  • Select an option

  • Save jultabary/94c8ce5b709d7074a71e9a4dfa6b0753 to your computer and use it in GitHub Desktop.

Select an option

Save jultabary/94c8ce5b709d7074a71e9a4dfa6b0753 to your computer and use it in GitHub Desktop.
Sample in rust
trait Repository {
fn save(&self);
}
struct ARepository {}
impl Repository for ARepository {
fn save(&self) {
println!("has been save !!!");
}
}
trait UseCase {
fn execute(&self);
}
struct UseCaseA<'a> {
repository: &'a dyn Repository
}
impl<'a> UseCase for UseCaseA<'a> {
fn execute(&self) {
self.repository.save();
}
}
impl<'a> UseCaseA<'a> {
fn new(repository: &dyn Repository) -> UseCaseA {
UseCaseA {
repository
}
}
}
struct UseCaseB<'a> {
repository: &'a dyn Repository
}
impl<'a> UseCaseB<'a> {
fn new(repository: &dyn Repository) -> UseCaseB {
UseCaseB {
repository
}
}
fn get_repository(&self) -> &'a dyn Repository {
return self.repository;
}
}
impl<'a> UseCase for UseCaseB<'a> {
fn execute(&self) {
self.repository.save();
}
}
struct ControllerA {}
fn move_and_drop(repository: ARepository) {
}
fn main() {
let repository = ARepository { };
let use_case_b = UseCaseB::new(&repository);
let use_case_a = UseCaseA::new(&repository);
move_and_drop(repository);
use_case_a.execute();
use_case_b.execute();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment