Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. use std::ops::Deref;
  2.  
  3. struct Client;
  4.  
  5. impl Client {
  6. fn new() -> Client {
  7. Client
  8. }
  9. }
  10.  
  11. struct ConfiglessApi(Client);
  12.  
  13. impl ConfiglessApi {
  14. fn get_details(&self, config: usize) -> usize {
  15. 1
  16. }
  17.  
  18. fn get_something(&self) -> usize {
  19. 1
  20. }
  21. }
  22.  
  23. impl From<Client> for ConfiglessApi {
  24. fn from(a: Client) -> ConfiglessApi {
  25. ConfiglessApi(a)
  26. }
  27. }
  28.  
  29. struct Api {
  30. inner: ConfiglessApi,
  31. config: usize,
  32. }
  33.  
  34. impl Api {
  35. fn get_details(&self) -> usize {
  36. 2
  37. }
  38. }
  39.  
  40. impl Deref for Api {
  41. type Target = ConfiglessApi;
  42.  
  43. fn deref(&self) -> &Self::Target {
  44. &self.inner
  45. }
  46. }
  47.  
  48. fn main() {
  49. let client = Client::new();
  50. let configless_api = client.into();
  51. let api = Api {
  52. inner: configless_api,
  53. config: 0,
  54. };
  55.  
  56. println!("{}", api.get_details()); // calls get_details for C
  57. println!("{}", api.deref().get_details(0)); // calls for get_details for B
  58. println!("{}", api.get_something()); // calls get_something for B because og dereferencing
  59. // println!("{}", api.get_details(0)); // does not work because of no dereferencing
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement