株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

DBへCSVをインポートするツールを作っている その16 - Dieselのセットアップその7

今日からはエラー出力を丁寧に読んでいくことにする。

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::*;

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.