Megha Agarwal
Megha Agarwal

Reputation: 81

error: failed to select a version for `syn`

error: failed to select a version for `syn`. \
    ... required by package `serde_derive v1.0.125`\
    ... which satisfies dependency `serde_derive = "=1.0.125"` of package `serde v1.0.125`    
    ... which satisfies dependency `serde = "^1.0.125"` of package `mongodb v2.1.0`\
    ... which satisfies dependency `mongodb = "^2.1"` of package `wagmeet v0.1.0 
 \(/mnt/e/College/Eighth Semester/Crypto_Capable/wagmeet_app)`\
versions that meet the requirements `^1.0.60` are: 1.0.86, 1.0.85, 1.0.84, 1.0.83, 1.0.82, 1.0.81, 1.0.80, 1.0.79, 1.0.78, 1.0.77, 1.0.76, 1.0.75, 1.0.74, 1.0.73, 1.0.72, 1.0.71, 1.0.70, 1.0.69, 1.0.68, 1.0.67, 1.0.66, 1.0.65, 1.0.64, 1.0.63, 1.0.62, 1.0.61, 1.0.60

all possible versions conflict with previously selected packages.

  previously selected package `syn v1.0.57`\
    ... which satisfies dependency `syn = "=1.0.57"` 
    \ of package `near-sdk-core v3.0.1`
    ... which satisfies dependency `near-sdk-core = "=3.0.1"` of package `near-sdk-macros v3.0.1` \
    ... which satisfies dependency `near-sdk-macros = "=3.0.1"` \ of package `near-sdk v3.0.1`   
    ... which satisfies dependency `near-sdk = "^3"` of package `wagmeet v0.1.0 `\

failed to select a version for `syn` which could resolve this conflict

Cargo.toml file

[package]
name = "wagmeet"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["rlib","cdylib"]

[dependencies]
near-sdk = "^3.1.0"
near-contract-standards = "^3.1.1"
mongodb = "2.0.0"
bson = { version = "2", features = ["chrono-0_4"] } # Needed for using chrono datetime in doc
tokio = "1"
chrono = "0.4" # Used for setting DateTimes
serde = "1"
serde_derive = "1.0.135"

I have tried various versions nothing seems to be working for now. Is mongoDb even compatible with Near protocol?

Upvotes: 0

Views: 5078

Answers (4)

jnnnnn
jnnnnn

Reputation: 4353

I got this error when I added a git dependency. Running

cargo update

fixed the problem.

More info:

The error I got was:

all possible versions conflict with previously selected packages.

  previously selected package `bytemuck v1.13.1`
    ... which satisfies dependency `bytemuck = "^1.7"` (locked to 1.13.1) of package `eframe v0.23.0`
    ... which satisfies dependency `eframe = "^0.23.0"` (locked to 0.23.0) of package `myproject v1.4.0 

failed to select a version for `bytemuck` which could resolve this conflict

and then cargo update resulted in:

Updating crates.io index
    Updating git repository `https://github.com/huggingface/candle.git`
    Updating ab_glyph v0.2.21 -> v0.2.23
    Updating accesskit v0.11.0 -> v0.11.2
    Updating accesskit_consumer v0.15.0 -> v0.15.2
    Updating accesskit_macos v0.7.1 -> v0.9.0
    Updating accesskit_unix v0.5.0 -> v0.5.2
    Updating accesskit_windows v0.14.0 -> v0.14.3
    Updating accesskit_winit v0.14.1 -> v0.14.4
      Adding addr2line v0.21.0
    ... and a whole lot more of Updating, Adding, and Removing.

Upvotes: 1

Osoro
Osoro

Reputation: 422

This can be the case when you're using workspaces and multipe toml files that point to different versions of a dependency. When you're using the dependency in your bin project they collide and dump that error on you.

Make sure all dependencies point to the same lib version and run cargo update

Upvotes: 0

Russo
Russo

Reputation: 2992

Try the following methods...

  • check your patched dependencies are pointed to the correct source repository
  • if you use other project's Cargo.lock or change some dependencies as you go, remove target folder and build again
  • check compilation logs for incorrect dependency paths!
  • update your Rust
  • delete .cargo and .rustup directories

Upvotes: -1

Chayim Friedman
Chayim Friedman

Reputation: 70990

There is a conflict between two of your dependencies: near-sdk requires exactly syn version 1.0.57, and mongodb requires at least syn version 1.0.60. Clearly both cannot exist together.

You have few solutions:

  • Patch near-sdk to support later syn versions. This is usually not recommended.
  • Upgrade near-sdk to the pre-release 4.0.0 (currently 4.0.0-pre.7) that supports later syn versions. This is an unstable version, and may break.
  • Downgrade mongodb to a version that supports syn version 1.0.57. The latest version that supports that is 1.2.5, so you need to specify in your Cargo.toml mongodb = "=1.2.5". But this relies on an old, unsupported version.

There is no "best solution". All solutions are bad. I would probably upgrade near-sdk to 4.0.0, but what to do depends on your needs.

Upvotes: 5

Related Questions