Linking error using Iced

So I am using the iced crate and I am trying to do a simple hello world example

This is my code:


use iced::{Text, Sandbox, Element, Settings};
fn main() -> iced::Result
{
    Hello::run(Settings::default())
}

struct Hello;

impl Sandbox for Hello
{
	type Message = ();

	fn new() -> Self
	{
		Self
	}

	fn title(&self) -> String
	{
		String::from("Title")
	}
	fn update(&mut self, _message: Self::Message)
	{

	}
	fn view(&mut self) -> Element<Self::Message>
	{
		Text::new("Hello world").into()
	}
}

So when I run cargo build I get a whole bunch of errors, starting of with

error: linking with `link.exe` failed: exit code: 1120

Then I get a huge list of directory then I get this:

  = note: LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
          LINK : warning LNK4286: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4286: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4286: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4217: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(wrapper.o)' in function '"void * __cdecl std::_Allocate_manually_vector_aligned<struct std::_Default_allocate_traits>(unsigned __int64)" (??$_Allocate_manually_vector_aligned@U_Default_allocate_traits@std@@@std@@YAPEAX_K@Z)'
          LINK : warning LNK4286: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)'
          LINK : warning LNK4286: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_util.o)'
          LINK : warning LNK4286: symbol '_invalid_parameter_noinfo_noreturn' defined in 'libucrt.lib(invalid_parameter.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4286: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4286: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4217: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(wrapper.o)' in function '"void __cdecl spirv_cross::report_and_abort(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?report_and_abort@spirv_cross@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)'
          LINK : warning LNK4286: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)'
          LINK : warning LNK4286: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_util.o)'
          LINK : warning LNK4286: symbol '__acrt_iob_func' defined in 'libucrt.lib(_file.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4286: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4286: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4217: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(wrapper.o)' in function '"void __cdecl spirv_cross::report_and_abort(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?report_and_abort@spirv_cross@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)'
          LINK : warning LNK4286: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)'
          LINK : warning LNK4286: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_util.o)'
          LINK : warning LNK4286: symbol 'fflush' defined in 'libucrt.lib(fflush.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4286: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4286: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4217: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(wrapper.o)' in function '_vfprintf_l'
          LINK : warning LNK4286: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)'
          LINK : warning LNK4286: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_util.o)'
          LINK : warning LNK4286: symbol '__stdio_common_vfprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4286: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4286: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4217: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(wrapper.o)' in function 'sc_internal_free_pointer'
          LINK : warning LNK4286: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)'
          LINK : warning LNK4286: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_util.o)'
          LINK : warning LNK4286: symbol 'free' defined in 'libucrt.lib(free.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4286: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4286: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4217: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(wrapper.o)' in function 'sc_internal_compiler_get_entry_points'
          LINK : warning LNK4286: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)'
          LINK : warning LNK4286: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_util.o)'
          LINK : warning LNK4286: symbol 'malloc' defined in 'libucrt.lib(malloc.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4286: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4286: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4217: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(wrapper.o)' in function '"void __cdecl spirv_cross::report_and_abort(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?report_and_abort@spirv_cross@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)'
          LINK : warning LNK4286: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)'
          LINK : warning LNK4286: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_util.o)'
          LINK : warning LNK4286: symbol 'abort' defined in 'libucrt.lib(abort.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4286: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4286: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4217: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(wrapper.o)' in function '"public: void __cdecl spirv_cross::SmallVector<struct spirv_cross::StringStream<4096,4096>::Buffer,8>::reserve(unsigned __int64)" (?reserve@?$SmallVector@UBuffer@?$StringStream@$0BAAA@$0BAAA@@spirv_cross@@$07@spirv_cross@@QEAAX_K@Z)'
          LINK : warning LNK4286: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)'
          LINK : warning LNK4286: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_util.o)'
          LINK : warning LNK4286: symbol 'terminate' defined in 'libucrt.lib(terminate.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol 'ceilf' defined in 'libucrt.lib(ceilf.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o)'
          LINK : warning LNK4286: symbol 'ceilf' defined in 'libucrt.lib(ceilf.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o)'
          LINK : warning LNK4286: symbol 'ceilf' defined in 'libucrt.lib(ceilf.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_parser.o)'
          LINK : warning LNK4217: symbol 'ceilf' defined in 'libucrt.lib(ceilf.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o)' in function '"protected: unsigned __int64 __cdecl std::_Hash<class std::_Umap_traits<unsigned int,unsigned int,class std::_Uhash_compare<unsigned int,struct std::hash<unsigned int>,struct std::equal_to<unsigned int> >,class std::allocator<struct std::pair<unsigned int const ,unsigned int> >,0> >::_Min_load_factor_buckets(unsigned __int64)const " (?_Min_load_factor_buckets@?$_Hash@V?$_Umap_traits@IIV?$_Uhash_compare@IU?$hash@I@std@@U?$equal_to@I@2@@std@@V?$allocator@U?$pair@$$CBII@std@@@2@$0A@@std@@@std@@IEBA_K_K@Z)'
          LINK : warning LNK4286: symbol 'ceilf' defined in 'libucrt.lib(ceilf.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)'
          LINK : warning LNK4286: symbol 'ceilf' defined in 'libucrt.lib(ceilf.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o)'
          LINK : warning LNK4286: symbol 'ceilf' defined in 'libucrt.lib(ceilf.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4217: symbol '__stdio_common_vsprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)' in function '_vsnprintf_l'
          LINK : warning LNK4286: symbol '__stdio_common_vsprintf' defined in 'libucrt.lib(output.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o)'
          LINK : warning LNK4217: symbol '_dtest' defined in 'libucrt.lib(_test.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)' in function '"int __cdecl fpclassify(double)" (?fpclassify@@YAHN@Z)'
          LINK : warning LNK4217: symbol '_fdtest' defined in 'libucrt.lib(_test.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)' in function '"int __cdecl fpclassify(float)" (?fpclassify@@YAHM@Z)'
          LINK : warning LNK4217: symbol 'localeconv' defined in 'libucrt.lib(localeconv.obj)' is imported by 'libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o)' in function '"private: void __cdecl spirv_cross::CompilerGLSL::init(void)" (?init@CompilerGLSL@spirv_cross@@AEAAXXZ)'
          libspirv_cross-60856a2a86c1268c.rlib(wrapper.o) : error LNK2019: unresolved external symbol __imp_strdup referenced in function sc_internal_compiler_msl_compile
          OLDNAMES.lib(strdup.obi) : error LNK2001: unresolved external symbol __imp_strdup
          libspirv_cross-60856a2a86c1268c.rlib(spirv_cfg.o) : error LNK2001: unresolved external symbol __imp__wassert
          libspirv_cross-60856a2a86c1268c.rlib(spirv_cross_parsed_ir.o) : error LNK2001: unresolved external symbol __imp__wassert
          libspirv_cross-60856a2a86c1268c.rlib(spirv_cross.o) : error LNK2001: unresolved external symbol __imp__wassert
          libspirv_cross-60856a2a86c1268c.rlib(spirv_glsl.o) : error LNK2001: unresolved external symbol __imp__wassert
          libspirv_cross-60856a2a86c1268c.rlib(spirv_hlsl.o) : error LNK2001: unresolved external symbol __imp__wassert
          libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o) : error LNK2001: unresolved external symbol __imp__wassert
          libspirv_cross-60856a2a86c1268c.rlib(spirv_msl.o) : error LNK2019: unresolved external symbol __imp_isdigit referenced in function "protected: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl spirv_cross::CompilerMSL::ensure_valid_name(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?ensure_valid_name@CompilerMSL@spirv_cross@@IEAA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V34@0@Z)
          OLDNAMES.lib(strdup.obi) : error LNK2001: unresolved external symbol __imp__strdup
          C:\Users\joe\Desktop\rust\target\debug\deps\rust.exe : fatal error LNK1120: 4 unresolved externals


error: aborting due to previous error

error: could not compile `rust`

I am currently using Windows 10.

Not too sure why this is happening?

If you post the same question elsewhere, please include a link in your post here. This helps avoid duplicated effort.

Sure man.

It looks like the build process is running into some problems with the spirv_cross library, which iced depends on by default via the spirv feature of the wgpu crate. I'm not familiar with either Windows or, uh, GPU stuff, so I can't help you diagnose the real problem, but you could try working around it by telling iced not to use wgpu: replace the iced line under [dependencies] in your Cargo.toml with

iced = { version = "0.3", features = ["glow"] }

Edit: actually this is probably better:

iced = { version = "0.3", default-features = false, features = ["glow_default_system_font", "glow"] }
1 Like

Hey man.

iced = { version = "0.3", default-features = false, features = ["glow_default_system_font", "glow"] }

How does Rust know not to use wgpu by typing all this in? Is it cause you are manually specifying what features to use therefore wgpu does not get included?

Here's an extract from iced's Cargo.toml:

[features]
default = ["wgpu", "default_system_font"]

This means that by default wgpu feature is active. By adding default-features = false we discard the defaults and build the list of active features from scratch.

2 Likes

@Joe232 You can also find the relevant information in the feature flags tab of the crate on docs.rs. (You can get there by pressing the “Feature flags” button in the top bar in the documentation.)

The entries feature = ["list", "of", "other", "features", "or", "dependencies"] means that when the feature on the left is enabled, it also enables the features / depencencies / features of dependencies on the left. These Cargo.toml entries are displayed on the docs.rs website with the left-hand-side as a heading and the right-hand-side list as a list of lines under each heading.

And default is enabled by default.

More information in the cargo book.

2 Likes