Rustで、構造体のメソッドを受け取る関数はどのようにすれば作れますか？


Rustを勉強中の初心者です。  
構造体のメソッドを受け取る関数を作成したいのですが、うまく関数に渡せないので、ご助言をお願いします。

**試したこと**  
「関数を受け取る関数 - Rust by Example」  
<http://doc.rust-jp.rs/rust-by-example-ja/fn/closures/input_functions.html>  
を参考にして、下記のコードを作成しました。

[code]

    struct Foo {
      s: String,
    }
    impl Foo {
      fn method(&self, s: &String) {
        println!("{}", s);
      }
    }
    
    fn function(s: &String) {
      println!("{}", s);
    }
    
    fn execute<F>(f: F, s: &String)
    where
      F: Fn(&String),
    {
      f(s);
    }
    
    fn main() {
      let s = String::from("function!");
      execute(function, &s);
      // >>> function!
    
      let s = String::from("method!");
      let foo = Foo { s };
      execute(foo.method, &foo.s);
      // >>> Error
    }
    
[/code]

**結果**

`execute(function, &s);` は実行できていますが、 `execute(foo.method, &foo.s);`
の部分で下記のエラーが出ます。

[code]

    error[E0615]: attempted to take value of method `method` on type `Foo`
      --> src/main.rs:35:15
       |
    35 |   execute(foo.method, &foo.s);
       |               ^^^^^^ method, not a field
       |
    help: use parentheses to call the method
       |
    35 |   execute(foo.method(_), &foo.s);
       |                     +++
    
[/code]

しかしながら、やりたいことは `execute(foo.method(&foo.s));` のように「メソッドの返り値を関数に渡す」ことではありません。

構造体のメソッドを関数に渡すには、どのようにすれば良いのでしょうか？  
よろしくお願いします。




クロージャを指定すれば、（記述量は増えますが）やりたいことは実現できます。

[code]

    execute(|x| foo.method(x), &foo.s);
    
[/code]

* * *

関数そのものを渡したいということならば、次のような記述もあります。  
ただ、そもそも `method` 関数は `self` と `s` の2つの引数を取る関数ですので、メソッドを受け取る関数に修正が必要です。

[code]

    fn execute2<F>(f: F, foo: &Foo, s: &String)
    where
      F: Fn(&Foo, &String),
    {
      f(foo, s);
    }
    
    execute2(Foo::method, &foo, &foo.s); // -> method!
    
[/code]

