nemesiscodex / actix-todo

Todo list API made in rust + actix-web + tokio-postgres
https://www.youtube.com/watch?v=gQwA0g0NNSI&list=PLECOtlti4PspZHOySyzf9RApJFguZPFoF
141 stars 20 forks source link

Errors on config.rs lastest config version: 0.12 #10

Open igotfr opened 2 years ago

igotfr commented 2 years ago

config.rs

pub use config::ConfigError;
use serde::Deserialize;

#[derive(Deserialize)]
pub struct ServerConfig {
  pub host: String,
  pub port: i32,
}

#[derive(Deserialize)]
pub struct Config {
  pub server: ServerConfig
}

impl Config {
  pub fn from_env() -> Result<Self, ConfigError> {
    let mut cfg = config::Config::new();
    cfg.merge(config::Environment::new())?;
    cfg.try_into()
  }
}

Cargo.toml

[dependencies]
actix-web = "^4"
actix-rt = "^2"
serde = { version = "^1", features = ["derive"] }
dotenv = "^0.15"
config = "^0.12"
$ cargo check
    Checking todo-actix v0.1.0 (/home/notecomm/prust/todo-actix)
error[E0624]: associated function `new` is private
  --> src/config.rs:22:35
   |
22 |     let mut cfg = config::Config::new();
   |                                   ^^^ private associated function
   |
  ::: /home/notecomm/.cargo/registry/src/github.com-1ecc6299db9ec823/config-0.12.0/src/config.rs:39:5
   |
39 |     pub(crate) fn new(value: Value) -> Self {
   |     --------------------------------------- private associated function defined here

error[E0061]: this function takes 1 argument but 0 arguments were supplied
  --> src/config.rs:22:19
   |
22 |     let mut cfg = config::Config::new();
   |                   ^^^^^^^^^^^^^^^^^^^-- supplied 0 arguments
   |                   |
   |                   expected 1 argument
   |
note: associated function defined here
  --> /home/notecomm/.cargo/registry/src/github.com-1ecc6299db9ec823/config-0.12.0/src/config.rs:39:19
   |
39 |     pub(crate) fn new(value: Value) -> Self {
   |                   ^^^

warning: use of deprecated associated function `config::Config::merge`: please use 'ConfigBuilder' instead
  --> src/config.rs:23:9
   |
23 |     cfg.merge(config::Environment::new())?;
   |         ^^^^^
   |
   = note: `#[warn(deprecated)]` on by default

warning: use of deprecated associated function `config::Environment::new`: please use 'Environment::default' instead
  --> src/config.rs:23:36
   |
23 |     cfg.merge(config::Environment::new())?;
   |                                    ^^^

error[E0271]: type mismatch resolving `<config::Config as TryFrom<config::Config>>::Error == ConfigError`
  --> src/config.rs:24:9
   |
24 |     cfg.try_into()
   |         ^^^^^^^^ expected enum `Infallible`, found enum `ConfigError`

error[E0277]: the trait bound `config::Config: std::convert::From<config::Config>` is not satisfied
  --> src/config.rs:24:9
   |
24 |     cfg.try_into()
   |         ^^^^^^^^ the trait `std::convert::From<config::Config>` is not implemented for `config::Config`
   |
   = note: required because of the requirements on the impl of `Into<config::Config>` for `config::Config`
   = note: required because of the requirements on the impl of `TryFrom<config::Config>` for `config::Config`
   = note: required because of the requirements on the impl of `TryInto<config::Config>` for `config::Config`

Some errors have detailed explanations: E0061, E0271, E0277, E0624.
For more information about an error, try `rustc --explain E0061`.
warning: `todo-actix` (bin "todo-actix") generated 2 warnings
error: could not compile `todo-actix` due to 4 previous errors; 2 warnings emitted
VibhavSurve09 commented 2 years ago

Associated functions you are trying to access are deprecated since 0.12, maybe try using something like below code

use config::Config;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct ServerConfig {
    pub host: String,
    pub port: u16,
}

impl ServerConfig {
    pub fn from_env() -> Self {
        let _config = Config::builder()
            .add_source(::config::Environment::default())
            .build()
            .unwrap();
        let config: ServerConfig = _config.try_deserialize().unwrap();
        config
    }
}
[dependencies]
actix-web = "4"
config = "0.13.1"

Reference : Config Doc https://docs.rs/config/0.13.1/config/index.html, Official example from actix web https://github.com/actix/examples/blob/master/databases/postgres/src/main.rs

igotfr commented 2 years ago

@VibhavSurve09 I'm referring the files in this repo: https://github.com/nemesiscodex/actix-todo/blob/master/src/config.rs https://github.com/nemesiscodex/actix-todo/blob/master/Cargo.toml

igotfr commented 2 years ago

https://github.com/actix/examples/issues/537