53270


下記の様な構成でファイルを作成し

[code]

    src/lib.rs
    src/myerror.rs
    src/mydata.rs
    
[/code]

mydataでmyerrorを利用したいと考えたのですが、下記の様なエラーが出ます。  
`error[E0583]: file not found for module `myerror``

mydataからmyerrorをmodするにはどの様にすれば良いですか？  
myerrorをlib内で共通のエラー処理として使用したいと考えています。

src/mydata.rs

[code]

    mod myerror;
    
    pub struct MyData{}
    
    impl MyData{
        pub fn ok_func(&self) -> Result<(),()>{
            Ok(())
        }
        pub fn err_fnuc(&self)->Result<(),myerror::Error>{
            Err(myerror::err())
        }
    }
    
[/code]

src/myerror.rs

[code]

    extern crate failure;
    use failure::Error as OtherError;
    
    pub type Error = OtherError;
    
    pub fn err() -> Error{
        failure::format_err!("error")
    }
    
[/code]

src/lib.rs

[code]

    mod mydata;
    use mydata::MyData;
    
    pub fn  test1() {
        let mydata = MyData{};
        let ret = mydata.err_fnuc();
        println!("{:?}", ret);
    
    }
    
    #[test]
    fn it_works() {
        test1();
    }
    
[/code]


CC BY-SA 4.0
2019-03-07T07:16:09.920
53265
2019-03-07T08:02:40.337
2019-03-07T08:02:40.337
76
32285
question
rust
lib内のmoduleからmodの利用方法


`mod` を宣言できるのは親モジュールだけになります。ここでは `lib.rs`
が親(ルート)にあたり、mydataとmyerrorは兄弟になっています。  
なので `lib` 内で `mod` 宣言をすれば使えるかと思います。  
また、Rust 2018では`extern crate`が不要になりました。それらを踏まえると以下のように書けます。

mydata.rs

[code]

    use crate::myerror;
    
    pub struct MyData {}
    
    impl MyData {
        pub fn ok_func(&self) -> Result<(), ()> {
            Ok(())
        }
        pub fn err_fnuc(&self) -> Result<(), myerror::Error> {
            Err(myerror::err())
        }
    }
    
[/code]

myerror.rs

[code]

    use failure::Error as OtherError;
    
    pub type Error = OtherError;
    
    pub fn err() -> Error {
        failure::format_err!("error")
    }
    
[/code]

lib.rs

[code]

    mod mydata;
    mod myerror;
    use mydata::MyData;
    
    pub fn test1() {
        let mydata = MyData {};
        let ret = mydata.err_fnuc();
        println!("{:?}", ret);
    }
    
    #[test]
    fn it_works() {
        test1();
    }
    
[/code]

手前味噌ですが昔解説を書いたのでよかったら参考にして下さい。  
<https://keens.github.io/blog/2018/12/08/rustnomoju_runotsukaikata_2018_editionhan/>


CC BY-SA 4.0
2019-03-07T07:50:00.363
53270
2019-03-07T07:50:00.363
22816
53265
answer