<div dir="ltr">Yep!<div><br></div><div><a href="http://main.rs">main.rs</a>:</div><div><br></div><div>mod foo;</div><div>mod bar;</div><div><br></div><div>fn main() {</div><div>    foo::foo();</div><div>}</div><div><br></div>

<div><a href="http://foo.rs">foo.rs</a>:</div><div><br></div><div>use bar; // this use lets you refer to the bar fn as bar::bar() instead of ::bar::bar()</div><div><br></div><div>pub fn foo() {</div><div>    bar::bar();</div>

<div>}</div><div><br></div><div><a href="http://bar.rs">bar.rs</a>:</div><div><br></div><div>pub fn bar() {}</div></div><div class="gmail_extra"><br clear="all"><div>Steven Fackler</div>
<br><br><div class="gmail_quote">On Sun, Jun 1, 2014 at 5:25 PM, Nicholas Bishop <span dir="ltr"><<a href="mailto:nicholasbishop@gmail.com" target="_blank">nicholasbishop@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

My intent wasn't to make bar a submodule of foo, but rather that foo &<br>
bar would be sibling modules (and foo just happens to use bar). Is<br>
there a way to do that?<br>
<div class="HOEnZb"><div class="h5"><br>
On Sun, Jun 1, 2014 at 6:56 PM, Steven Fackler <<a href="mailto:sfackler@gmail.com">sfackler@gmail.com</a>> wrote:<br>
> The directory layout of the project should match the module hierarchy. bar<br>
> is a submodule of foo so it shouldn't live next to foo in the filesystem.<br>
> There are a couple of filesystem setups that will work:<br>
><br>
> src/<br>
>      <a href="http://main.rs" target="_blank">main.rs</a><br>
>      foo/<br>
>          <a href="http://mod.rs" target="_blank">mod.rs</a><br>
>          <a href="http://bar.rs" target="_blank">bar.rs</a><br>
><br>
> src/<br>
>      <a href="http://main.rs" target="_blank">main.rs</a><br>
>      foo/<br>
>           <a href="http://mod.rs" target="_blank">mod.rs</a><br>
>           bar/<br>
>                <a href="http://mod.rs" target="_blank">mod.rs</a><br>
><br>
> The first configuration seems to be what most code uses. If bar ends up<br>
> having submodules of its own, it would need to move to the second setup.<br>
><br>
> Steven Fackler<br>
><br>
><br>
> On Sun, Jun 1, 2014 at 3:02 PM, Nicholas Bishop <<a href="mailto:nicholasbishop@gmail.com">nicholasbishop@gmail.com</a>><br>
> wrote:<br>
>><br>
>> Here's example code:<br>
>><br>
>> /src/<a href="http://main.rs" target="_blank">main.rs</a>:<br>
>> mod foo;<br>
>> fn main() {<br>
>>     foo::foo();<br>
>> }<br>
>><br>
>> /src/<a href="http://bar.rs" target="_blank">bar.rs</a>:<br>
>> pub fn bar() {<br>
>> }<br>
>><br>
>> /src/<a href="http://foo.rs" target="_blank">foo.rs</a>:<br>
>> mod bar;<br>
>> pub fn foo() {<br>
>>     bar::bar();<br>
>> }<br>
>><br>
>> This fails:<br>
>> $ rust-nightly-x86_64-unknown-linux-gnu/bin/rustc -v<br>
>> rustc 0.11.0-pre-nightly (064dbb9 2014-06-01 00:56:42 -0700)<br>
>> host: x86_64-unknown-linux-gnu<br>
>><br>
>> $ rust-nightly-x86_64-unknown-linux-gnu/bin/rustc <a href="http://main.rs" target="_blank">main.rs</a><br>
>> foo.rs:1:5: 1:8 error: cannot declare a new module at this location<br>
>> <a href="http://foo.rs:1" target="_blank">foo.rs:1</a> mod bar;<br>
>>              ^~~<br>
>> foo.rs:1:5: 1:8 note: maybe move this module `foo` to its own<br>
>> directory via `foo/<a href="http://mod.rs" target="_blank">mod.rs</a>`<br>
>> <a href="http://foo.rs:1" target="_blank">foo.rs:1</a> mod bar;<br>
>>              ^~~<br>
>> foo.rs:1:5: 1:8 note: ... or maybe `use` the module `bar` instead of<br>
>> possibly redeclaring it<br>
>> <a href="http://foo.rs:1" target="_blank">foo.rs:1</a> mod bar;<br>
>>              ^~~<br>
>> error: aborting due to previous error<br>
>><br>
>> I tried the first suggestion (moving <a href="http://foo.rs" target="_blank">foo.rs</a> to foo/<a href="http://mod.rs" target="_blank">mod.rs</a>), this fails<br>
>> too:<br>
>> foo/mod.rs:1:5: 1:8 error: file not found for module `bar`<br>
>> foo/<a href="http://mod.rs:1" target="_blank">mod.rs:1</a> mod bar;<br>
>>                  ^~~<br>
>><br>
>> The second suggestion, which I took to mean replacing "mod bar" with<br>
>> "use bar", also failed:<br>
>> brokencrate/foo.rs:1:5: 1:8 error: unresolved import: there is no `bar` in<br>
>> `???`<br>
>> brokencrate/<a href="http://foo.rs:1" target="_blank">foo.rs:1</a> use bar;<br>
>>                          ^~~<br>
>> brokencrate/foo.rs:1:5: 1:8 error: failed to resolve import `bar`<br>
>> brokencrate/<a href="http://foo.rs:1" target="_blank">foo.rs:1</a> use bar;<br>
>>                          ^~~<br>
>> error: aborting due to 2 previous errors<br>
>><br>
>> I'm guessing that this failure is related to this RFC:<br>
>><br>
>> <a href="https://github.com/rust-lang/rfcs/blob/master/complete/0016-module-file-system-hierarchy.md" target="_blank">https://github.com/rust-lang/rfcs/blob/master/complete/0016-module-file-system-hierarchy.md</a><br>


>><br>
>> Unfortunately the RFC describes "a common newbie mistake" but not what<br>
>> a newbie might do to correct this mistake. I also looked through<br>
>> <a href="http://doc.rust-lang.org/tutorial.html#crates-and-the-module-system" target="_blank">http://doc.rust-lang.org/tutorial.html#crates-and-the-module-system</a>,<br>
>> but didn't see this question directly addressed.<br>
>><br>
>> Thanks,<br>
>> -Nicholas<br>
>> _______________________________________________<br>
>> Rust-dev mailing list<br>
>> <a href="mailto:Rust-dev@mozilla.org">Rust-dev@mozilla.org</a><br>
>> <a href="https://mail.mozilla.org/listinfo/rust-dev" target="_blank">https://mail.mozilla.org/listinfo/rust-dev</a><br>
><br>
><br>
</div></div></blockquote></div><br></div>