今日からはエラー出力を丁寧に読んでいくことにする。
error[E0599]: the method `filter` exists for struct `table`, but its trait bounds were not satisfied --> src/main.rs:21:26 | 21 | let results = stocks.filter(code.eq(given_code as time_and_sales_deliver::schema::stocks::code)) | ^^^^^^ method cannot be called on `table` due to unsatisfied trait bounds | ::: /app/src/schema.rs:1:1 | 1 | / table! { 2 | | stocks (code, datetime) { 3 | | code -> Int4, 4 | | datetime -> Timestamp, ... | 7 | | } 8 | | } | |_- doesn't satisfy `table: Iterator` | = note: the following trait bounds were not satisfied: `table: Iterator` which is required by `&mut table: Iterator` = help: items from traits can only be used if the trait is in scope help: the following traits are implemented but not in scope; perhaps add a `use` for one of them: | 3 | use std::iter::Iterator; | 3 | use diesel::query_dsl::filter_dsl::FilterDsl; | 3 | use diesel::query_dsl::QueryDsl; | 3 | use futures::StreamExt; | and 1 other candidate
the method `filter` exists for struct `table`, but its trait bounds were not satisfied
「 filter
メソッドは table
構造体に存在するが、トレイトの境界が満たされていない」のが直接の原因。ここで /app/src/schema.rs
を見ると、下記の宣言になっている。
1 | / table! { 2 | | stocks (code, datetime) { 3 | | code -> Int4, 4 | | datetime -> Timestamp, ... | 7 | | } 8 | | } | |_- doesn't satisfy `table: Iterator`
table: Iterator
が満たされていないのが原因。下記の use
により、満たされる可能性が示唆されている。
3 | use std::iter::Iterator; | 3 | use diesel::query_dsl::filter_dsl::FilterDsl; | 3 | use diesel::query_dsl::QueryDsl; | 3 | use futures::StreamExt;
このエラーは main.rs
の冒頭で下記の use
をすることにより解消できた。
use self::models::*; use self::time_and_sales_deliver::*; use self::diesel::prelude::*;