GithubHelp home page GithubHelp logo

demystifyfp / fsconfig Goto Github PK

View Code? Open in Web Editor NEW
155.0 9.0 17.0 479 KB

FsConfig is a F# library for reading configuration data from environment variables and AppSettings with type safety.

Home Page: https://www.demystifyfp.com/FsConfig/

License: The Unlicense

Batchfile 0.06% F# 92.28% Shell 0.47% Dockerfile 0.58% JavaScript 2.42% CSS 4.18%
fsharp functional-programming generic-programming environment-variables 12-factor appsettings configuration configuration-management

fsconfig's People

Contributors

2mol avatar aurecchia avatar demystifyfp avatar eugene-g avatar mtnrbq avatar piaste avatar queil avatar rajivhost avatar tamizhvendan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fsconfig's Issues

Docs: fix rendering

Describe the bug
At the moment docs generation is broken.

To Reproduce

  1. Run ./build.sh ReleaseDocs

Error:

Fatal error: System.Exception: error while formatting file /home/queil/gh/FsConfig/docsSrc/content/index.fsx. Errors are:
seq
  [SourceError
     ((105, 2), (105, 5), ErrorKind.Error,
      "The block following this 'let' is unfinished. Every code block is an expression and must have a result. 'let' cannot be the final code element in a block. Consider giving this block an explicit result.");
   SourceError
     ((48, 21), (48, 30), ErrorKind.Error,
      "The namespace or module 'GetStream' is not defined.");
   SourceError
     ((49, 6), (49, 12), ErrorKind.Error,
      "The record label 'ApiKey' is not defined.");
   SourceError
     ((83, 2), (83, 12), ErrorKind.Error,
      "The type 'Convention' is not defined."); ...]
   at Microsoft.FSharp.Core.PrintfModule.PrintFormatToStringThenFail@1639.Invoke(String message) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\printf.fs:line 1639

It seems (*** do-not-eval-file ***) is not respected.

Expected behavior
A new version of docs gets published to the docs dir.

Provide override to change list separator

Description

I have legacy apps using ';' as a list separator

Expected behavior

Ideally, I'd like to be able to specify a list separator, e.g. in a similar way to how the environment variable name separator is specified:

[<Convention("FSTWEET", Separator="-",ListSeparator=";")>]

Actual behavior

Current implementation only supports ',' as list separator

Known workarounds

No known workaround

I'm happy to submit a PR for the change if you believe it is worthwhile

Consecutive defaults

When working with configurations, sometimes they get overwritten depending on the origin. The order of the defaulting is discussable, but I think it is

  • read environment vars
  • read configuration file 1, maybe from server
  • read local configuration file
  • read arguments

and of course starting with settings that the programmer considers perfect as defaults.

type Settings { showAsWindow: bool; windowXsize: int; windowYsize: int }
let DefaultSettings = { true; 1024; 768 }

wouldn't it be nice to have a configuration chain like

let setup = DefaultSettings
|> EnvConfig.Get<Settings>
|> IniConfig.Get<Settings>
|> ArgConfig.Get<Settings>

Is this possible somehow?

FsConfig doesn't support JSON Array

Description

FsConfig doesn't support JSON Array

Repro steps

  1. Define config.json
    here is a JSON:
    {
    data: ["1", "2"]
    }

  2. Define F# type
    type Config = {
    Data: string list
    }

  3. Parse
    let config = ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("config.json")
    .Build()
    |> AppConfig

let result = config.Get()

Expected behavior

result should contain not empty Config.Data

Actual behavior

result contains empty Config.Data

  • Operating system Windows 10 x64

TypeShape conflict

Hi,
I have a TypeShape conflict when I try to install FsConfig and Equinox.Codec as shown below

image

Can we hope to have an update of the dependency here?
Best regards,
Rajiv.

Split Microsoft.Extensions.Configuration-dependent features into a separate NuGet

Description

FsConfig depends on Microsoft.Extensions.Configuration but this dependency is only needed when using IConfigurationRoot. Wouldn't it make sense to split the package in two so the users not using Microsoft's extension do not need to needlessly deal with this dependency?

Repro steps

Add FsConfig package to a project and do dotnet restore.

Expected behavior

Can reference a "core" FsConfig without dependency on Microsoft.Extensions.Configuration and the NU1603 warning does not appear.

Actual behavior

Getting this warning:

warning NU1603: FsConfig 2.1.5 depends on Microsoft.Extensions.Configuration (>= 0.0.0) but Microsoft.Extensions.Configuration 0.0.0 was not found. An approximate best match of Microsoft.Extensions.Configuration 1.0.0 was resolved.

Context

  • Os: Ubuntu 18.04
  • .NET Core 3.1.101
  • FsConfig 2.1.5

Optional subsections does not work.

Optional subsections does not work for .json files

type SubSection = {
    valueA : string
}

type Settings = {
   subSection : SubSection option
}

Reading a json with the subsection in place gives a null value.

Possible to supply dynamic keys?

Description

Just curious if there's any way to supply dynamic keys, like a Map<string, string>? eg. if I had a top-level Connections key, I could add in an entry for each DB connection.

I tried using Dictionary<string, string> but got a not implemented error.

Related information

  • macOS Mojave
  • FSconfig 2.1.6
  • 3.1.300 .NET core

Could not load file or assembly 'TypeShape, Version=8.0.1.0'

Description

Retrieving the config fails with Could not load file or assembly 'TypeShape, Version=8.0.1.0,...

Repro steps

  1. Create a new project referencing FsConfig
  2. Create a config record type and use the default match expression from the docs to retrieve the config

Expected behavior

Config gets successfully retrieved.

Actual behavior

The following exception gets thrown:

Unhandled exception. System.IO.FileLoadException: Could not load file or assembly 'TypeShape, Version=8.0.1.0, Culture=neutral, PublicKeyToken=null'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
File name: 'TypeShape, Version=8.0.1.0, Culture=neutral, PublicKeyToken=null'
   at FsConfig.Core.parseInternal[T](IConfigReader configReader, FSharpFunc`2 fieldNameCanonicalizer, FieldValueParseArgs args)
   at Program.main(String[] argv) in

Known workarounds

Add TypeShape directly to the project:

    <PackageReference Include="TypeShape" Version="8.0.1" />

Related information

  • Operating system: Ubuntu 18.04
  • FsConfig: 2.1.5
  • .NET Core 3.1.101

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.