Git Product home page Git Product logo

cdk-from-cfn's Introduction

cdk_from_cfn

In a world where people want to use the full extent of the cdk, there was no product that would transform all your JSON/YAML into beautiful typescript...until now.

cdk_from_cfn will take your JSON/YAML and output the equivalent typescript.

User Guide

$ cargo build --release
$ ./target/release/cdk_from_cfn [INPUT] [OUTPUT]
  • INPUT is the input file path (STDIN by default).
  • OUTPUT is the output file path; if not specified, output will be printed on your command line (STDOUT by default).

Cargo Features

Name Enabled by default Description
typescript ✔️ Enables support for TypeScript output
golang ✔️ Enables support for Go output
java ✔️ Enables support for Java output
Python ✔️ Enables support for Python output
csharp ✔️ Enables support for C# output

You can enable experimental languages (not enabled by default) by enabling the relevant feature:

$ cargo build --release --features=<feature-name>
Finished release [optimized] target(s) in 0.17s

If you want to disable on-by-default languages, you can pass --no-default-features:

$ cargo build --release --no-default-features --features=golang
Finished release [optimized] target(s) in 0.17s

Implemented

  • Fn::FindInMap
  • Fn::Join
  • Fn::Sub
  • Ref
  • Fn::And
  • Fn::Equals
  • Fn::If
  • Fn::Not
  • Fn::Or
  • Fn::GetAtt
  • Fn::Base64 support
  • Fn::ImportValue support
  • Fn::Select support
  • Resource ordering based on dependencies
  • Conditions are emitted in ts but not attached to resource conditions
  • Metadata emission for updates to asgs / lambda functions.
  • Emission of outputs / exports
  • Fn::GetAZs support
  • Adding depends-on, and ordering based on it too.
  • Deletion policy
  • Fn::Cidr support

Remaining

There are known unsupported features. Working on them in priority order:

  • Create policy
  • ssm metadata references
  • secretsmanager references

cdk-from-cfn's People

Contributors

adwhalen avatar cdklabs-automation avatar colifran avatar dependabot[bot] avatar github-actions[bot] avatar hbobertz avatar iph avatar jfkisafk avatar madeline-k avatar naumel avatar rix0rrr avatar roblaks avatar romainmuller avatar sandeepklr avatar therealamazonkendra avatar vtanguturi avatar winteryukky avatar yilong-wang 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

Watchers

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

cdk-from-cfn's Issues

Parsing issue for intrinsic function Fn::Sub.

If the value for the intrinsic function Fn::Sub does not contain a variable to be replaced, starting with "${" ending with "}", then parsing fails.

"Description": { "Fn::Sub": "Some value without a variable to be replaced" }

Error occurs at this line of code: delimited(tag("${"), take_until("}"), take(1usize))

fn inner_resolver(str: &str) -> IResult<&str, SubValue> {
    let ir = alt((
        map(
            delimited(tag("${"), take_until("}"), take(1usize)),
            |var: &str| SubValue::Variable(var.to_string()),
        ),
        map(take_until("${"), |static_str: &str| {
            SubValue::String(static_str.to_string())
        }),
    ))(str);

    let (remaining, res) = ir?;
    IResult::Ok((remaining, res))
}

Custom resources aren't resolving

If you use a custom resource, it will explode:

Error: TransmuteError: invalid resource type name: Custom::<NAME_OF_CUSTOM_RESOURCE>

YAML template conversion fails when intrinsic functions using ! are present

Any place using intrinsic functions containing ! instead of Fn:: will fail when converting YAML. The code sample below will fail while the second sample below will succeed. When using JSON format for the template, there is no issue which rules out a template issue.

IsUsEast1: !Equals 
  - !Ref 'AWS::Region'
  - us-east-1
IsUsEast1: 
    Fn::Equals:
    - Fn::Ref 'AWS::Region'
    - us-east-1

go: synthesizing a template with CFN properties of type json fails

a template including this:

"MyRDMessageQueueGroup" : {
      "Type" : "AWS::IAM::Group",
      "Properties" : {
        "Policies": [ {
          "PolicyName": "MyQueueGroupPolicy",
          "PolicyDocument": {
            "Statement":[ {
              "Effect":"Allow",
 	      "Action":[ "sqs:DeleteMessage", "sqs:ReceiveMessage" ],
              "Resource":[ { "Fn::GetAtt" : ["MyQueue1", "Arn"]}, { "Fn::GetAtt" : ["MyQueue2", "Arn"]} ]
            } ]
          }
        } ]
      }
    }

Will fail to synthesize to go with the error:

thread 'main' panicked at 'internal error: entered unreachable code: object with simple structure (Json)', src/synthesizer/golang/mod.rs:637:29

This is because the type of a PolicyDocument is json (docs), and the go synthesizer doesn't currently handle this case https://github.com/iph/noctilucent/blob/e75176e31e4af8b157d28b825ea9f995e4c7bcae/src/synthesizer/golang/mod.rs#L631.

Minor improvement - remove many non-null assertions

It's not good to use the non-null assertion operator if we can avoid it, and we can fix the way defaults are applied to props to make this not needed.

We can change the following output

public constructor(scope: cdk.App, id: string, props: NoctStackProps) {
    super(scope, id, props);

    // Applying default props
    props = {
      ...props,
      myProperty: props.myProperty ?? '',

To the below output

public constructor(scope: cdk.App, id: string, originalProps: NoctStackProps) {
    super(scope, id, originalProps);

    // Applying default props
    const props = {
      ...originalProps,
      myProperty: originalProps.myProperty ?? '',

And now props has non nullable types and does not need non-null assertions everywhere.

Support for AWS::Serverlesss::* resources referencing non existent library "aws-cdk-lib/aws-serverless"

Generated application using CDK Migrate from a cloudfromation template containing AWS::Serverlesss::* resources such as AWS::Serverlesss::Function fail after migration during synth as the output uses “import * as serverless from 'aws-cdk-lib/aws-serverless';” but there is no such library. Possibly solutions are either to create such a library (discussed Async @TheRealAmazonKendra as we may be able to help but such resolution would be in a different repo) or to use the workaround below for this tool.

During cdk synth

TSError: ⨯ Unable to compile TypeScript:
lib/testcdkmigrate-stack.ts:3:29 - error TS2307: Cannot find module 'aws-cdk-lib/aws-serverless' or its corresponding type declarations.
3 import * as serverless from 'aws-cdk-lib/aws-serverless';

Workaround change is to manually edit the CDK to use the SAM libarary
Change

import * as serverless from 'aws-cdk-lib/aws-serverless';

to

import * as serverless from 'aws-cdk-lib/aws-sam';

Quoted numbers in yaml sometimes cause an error

There's inconsistent handling of quoted numbers in yaml CloudFormation templates. Consider this example:

AWSTemplateFormatVersion: 2010-09-09
Parameters:
  Param1:
    Type: Number
    Default: !!int "0"  # This line does not cause an error.
Conditions:
  Condition1:
    "Fn::Equals":
    - "Fn::Select":
      - !!int "0"  # This line causes an error unless you remove the quotes around the zero.
      - "Fn::Split":
        - "delimiter"
        - "string"
    - ""
Resources:

The first instance of !!int "0" is accepted by noctilucent, but the second instance causes this error:

Error: Conditions.Condition1.Fn::Equals[0].Fn::Select[0]: invalid type: string "0", expected usize at line 10 column 9

Vague error message related to resource property

This input causes an error. Note the use of SourceSecurityGroupId in a SecurityGroupEgress. CloudFormation accepts this template and creates a stack, but Noctilucent produces a really vague error message.

AWSTemplateFormatVersion: 2010-09-09
Resources:
  SG1:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: 'SG1'
      VpcId: !Ref TestVPC
  SG2:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      VpcId: !Ref TestVPC
      GroupDescription: 'SG2'
      SecurityGroupEgress:
        IpProtocol: 'TCP'
        FromPort: 10000
        ToPort: 10000
        SourceSecurityGroupId: !Ref SG1
  TestVPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: '10.0.0.0/16'

The output looks like this:

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/ir/resources/mod.rs:129:68
stack backtrace:
   0:        0x105483b87 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hae51cb91d407e2ef
   1:        0x1054195db - core::fmt::write::h746bc0969202388b
   2:        0x10545ee3c - std::io::Write::write_fmt::h4098c2c7437a0bd7
   3:        0x105487704 - std::sys_common::backtrace::print::h8360bf0158e89b36
   4:        0x1054874c9 - std::panicking::default_hook::{{closure}}::hedf04c568eb6e0bc
   5:        0x105487a67 - std::panicking::rust_panic_with_hook::h22edd02828aff274
   6:        0x105487878 - std::panicking::begin_panic_handler::{{closure}}::h6895f44a9b7e2caa
   7:        0x105487809 - std::sys_common::backtrace::__rust_end_short_backtrace::h013519e9b77978c5
   8:        0x1054877f2 - _rust_begin_unwind
   9:        0x10549ea63 - core::panicking::panic_fmt::h2a51b60c12d11322
  10:        0x10549eb47 - core::panicking::panic::h00b4c20719c0abc2
  11:        0x105437484 - noctilucent::ir::resources::ResourceTranslator::translate::hf043457459ff11fa
  12:        0x10542f4e7 - noctilucent::ir::resources::ResourceInstruction::from::ha9a604782ce9b876
  13:        0x10542a9e2 - noctilucent::ir::CloudformationProgramIr::from::hbee5e1fbc7775a35
  14:        0x1053d706e - noctilucent::main::hde7d4cf2812ec0cf
  15:        0x1053ae516 - std::sys_common::backtrace::__rust_begin_short_backtrace::hcdb722f1a5cc110d
  16:        0x1053d8449 - _main

There are actually two issues here. The first is that the template causes an error. The second is that the error message doesn't give the user any information they can use to locate the problem in the input. There's no line number, property name, resource name, etc.

wrong output - updatePolicy casing

    lambdaFunctionAliaslive.cfnOptions.updatePolicy = {
      CodeDeployLambdaAliasUpdate: {
        ApplicationName: serverlessDeploymentApplication.ref,
        DeploymentGroupName: lambdaFunctionDeploymentGroup.ref,
      },
    };

Looks like it should be camelCased:

    lambdaFunctionAliaslive.cfnOptions.updatePolicy = {
      codeDeployLambdaAliasUpdate: {
        applicationName: serverlessDeploymentApplication.ref,
        deploymentGroupName: lambdaFunctionDeploymentGroup.ref,
      },
    };

Also lambdaFunctionDeploymentGroup was output after this, causing "Variable 'lambdaFunctionDeploymentGroup' is used before being assigned."

cdk migrate cli UX issue

When not supplying stack name an error with unclear messaging is shown. Expectation state the missing parameters

$ ./node_modules/cdk/bin/cdk migrate --from-path template.yaml  --output-path cdkstack/
  ❌  Migrate failed for undefined: stack generation failed due to error 
'The text and separator arguments should be of type string'

supplying --stack-name test as well resolves the issue but it was unclear that this was needed from the error.

Fn::Import causes logical error in emission

Repro -- valid template

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Parameters": {
        "RefKey": {
            "Type": "String",
        }
    },
    "Resources": {
        "WaitHandle": {
            "Type": "AWS::CloudFormation::WaitConditionHandle",
            "Timeout": {
                "Fn::Import": {
                    "Ref": "RefKey"
                }
            }
        },
    }
}

Expected Result

Exporting of a template with fn import.

Actual Result

Logical error, it seems Noctilucent truncated valid data:

import * as cdk from 'aws-cdk-lib';
import * as cloudformation from 'aws-cdk-lib/aws-cloudformation';

export interface NoctStackProps extends cdk.StackProps {
  /**
   */
  readonly refKey: string;
}

export class NoctStack extends cdk.Stack {
  public constructor(scope: cdk.App, id: string, props: NoctStackProps) {
    super(scope, id, props);

    // Resources
    const waitHandle = new cloudformation.CfnWaitConditionHandle(this, 'WaitHandle', {
    });
  }
}

Does not support using a single value instead of list for Transform

CDK migrate does not support using a single value instead of list in at least this case (maybe others? not checked).

In a template where the transform value is specified as a single value rather than list which is common in examples/docs e.g. https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-template-anatomy.html)
i.e. this line

Transform: AWS::Serverless-2016-10-31

Results in this Error when using CDK migrate

This is an experimental feature. We make no guarantees about the outcome or stability of the functionality.
 ❌  Migrate failed for testcdkmigrate: stack generation failed due to error 'Transform: invalid type: string "AWS::Serverless-2016-10-31", expected a sequence at line 1 column 12'

Changing the template to use a list instead works as a workaround

Transform: 
  - AWS::Serverless-2016-10-31

Expectations are both formats work.

Recommend adding license headers to source files

Having license headers on files is a best practice, providing clarity when those files are disconnected from the top level LICENSE file.

For this project I believe the default license header would be:

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0 OR MIT

csharp: support for synthesizing apps in C#

Status: Work in Progress

To implement

  • Import statements
  • Parameters as construct props
  • Resources
  • Mappings
  • Conditions
  • Outputs
  • !Ref
  • !GetAtt
  • !FindInMap
  • !Join
  • !Sub
  • !Base64
  • !ImportValue
  • !Select
  • !Cidr
  • !GetAZs
  • Conditional resource creation
    • DeletionPolicy
    • UpdatePolicy
    • Metadata
    • DependsOn
  • Description

Challenges unique to C#

  • The casing for using statements is not consistent. Acronyms are all caps (Amazon.CDK.IAM) but names of services are capitalized (Amazon.CDK.Lambda). To know which is which, we need to fetch this from somewhere.
  • Defining the type for each input prop
  • Defining the type for each output prop
  • Type names for composite nested properties need to be explicitly included - i.e. the WebsiteConfiguration property must be declared with new CfnBucket.WebsiteConfigurationProperty(C# doc link)

Optimizations

  • Only create local variables for resources that will be referenced again later
  • Extract shared code snippets to helper functions. (I didn't do this yet, because too much abstraction makes it harder to read and understand. So I'm not sure it's worth it to avoid a little bit of repetition)

all languages: type not properly translated into booleans

When a template has the following:

"Type": "String",
 "Default": "false",
 "AllowedValues": ["false", "true"]

The CDK translates this into a boolean but cdk-from-cfn translates it into a string across all languages. This is causing every language to fail for the parameters block in this template

cdk synth error on generated code

I started with this template: https://github.com/awslabs/aws-cloudformation-templates/blob/master/aws/solutions/LambdaStaticIP/lambda-static.cfn.yaml
Downloaded it locally and run "cdk migrate --stack-name "evgeny" --language "typescript" --from-path lambda-static.cfn.yaml"
The CDK app was generated successfully.
Run "cdk synth" generates "Error: There is already a Construct with name 'PublicSubnetOne' in EvgenyStack [evgeny]"
cdk version: 2.106.1 (build a2e5f65)

Single Dependency not resolving

Repro

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Conditions": {
        "EmitAccountId": {
            "Fn::Equals": [
                "true",
                "false"
            ]
        }
    },
    "Resources": {
        "WaitHandle": {
            "Type": "AWS::CloudFormation::WaitConditionHandle"
        },
    },
    "Outputs": {
        "Condition": "EmitAccountId",
        "AccountId": {
            "Value": {
                "Ref": "AWS::AccountId"
            }
        }
    }
}

Expected Results

To see an emitted template

Actual Results

Error: Outputs.Condition: invalid type: string "EmitAccountId", expected struct Output at line 17 column 22

Support exporting as a Construct vs a Stack

At the moment, noctilucent only exports as a stack. However, our use-case is a hybrid CDK + JSON stack , where we load the JSON using CfnInclude, and then retrieve a CDK reference to the resource using Cfn.getResource. It'd be great to have a command-line option to instead export as a Construct for this use-case.

README shows wrong command

README says ./target/release/cdk_from_cfn [INPUT] [OUTPUT]

But it should be ./target/release/cdk-from-cfn [INPUT] [OUTPUT]

Also great project!

Support for AWS::Serverlesss::* resources referencing non existent library "aws-cdk-lib/aws-serverless"

Generated application using CDK Migrate from a cloudfromation template containing AWS::Serverlesss::* resources such as AWS::Serverlesss::Function fail after migration during synth as the output uses “import * as serverless from 'aws-cdk-lib/aws-serverless';” but there is no such library. Possibly solutions are either to create such a library (discussed Async @TheRealAmazonKendra as we may be able to help but such resolution would be in a different repo) or to use the workaround below for this tool.

During cdk synth

TSError: ⨯ Unable to compile TypeScript:
lib/testcdkmigrate-stack.ts:3:29 - error TS2307: Cannot find module 'aws-cdk-lib/aws-serverless' or its corresponding type declarations.
3 import * as serverless from 'aws-cdk-lib/aws-serverless';

Workaround change is to manually edit the CDK to use the SAM libarary
Change

import * as serverless from 'aws-cdk-lib/aws-serverless';

to

import * as serverless from 'aws-cdk-lib/aws-sam';

Add support for --verbose in cdk-from-cfn and aws-cdk

cdk-from-cfn currently does not surface much helpful error messaging for debugging purposes. One example of which being #187. We need to add additional error logging, and debug logging across cdk-from-cfn and surface it to the user depending on a --verbose flag. We also need to surface this in our transmute function so that we can pass a --verbose flag from the cdk cli to cdk-from-cfn

ops: setup publishing

We need GitHub actions to automatically publish new versions so they can be consumed by the cdk cli.

Multiline strings aren't correctly formatted in python

The template

  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: StaticExternalIp
      Description: Lambda Function with code to call an external service
      Code:
        ZipFile: !Sub |
          const https = require('https');

          exports.handler = async (event) => {
            const url = 'https://api.ipify.org';
            let data = "";

            return new Promise((resolve) => {
              https.get(url, res => {

              res.on('data', chunk => { data += chunk }) 

              res.on('end', () => {
                resolve(data);
                })
              }) 
            })
          };

is formatted into a string that does not synth.

python: lambda imports fail

lambda seems to be a protected term in python because import aws_cdk.lambda as lambda cannot find the import. The error resolved when this is changed to import aws_cdk.aws_lambda as aws_lambda. We may want to consider prefixing all our imports with aws_ in case there are other cases of this we have not yet discovered.

CDK migrate

CDK migrate does not support using a single value instead of list in at least this case (maybe others? not checked).

In a template where the transform value is specified as a single value rather than list which is common in examples/docs e.g. https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-template-anatomy.html)
i.e. this line

Transform: AWS::Serverless-2016-10-31

Results in this Error when using CDK migrate

This is an experimental feature. We make no guarantees about the outcome or stability of the functionality.
 ❌  Migrate failed for testcdkmigrate: stack generation failed due to error 'Transform: invalid type: string "AWS::Serverless-2016-10-31", expected a sequence at line 1 column 12'

Changing the template to use a list instead works as a workaround

Transform: 
  - AWS::Serverless-2016-10-31

Expectations are both formats work.

Noctilucent won't work because of inputFormat

Most recent code version is blowing up:

./target/release/noctilucent ~/beta-iad-fdn-template.yml ~/noct_output
thread 'main' panicked at 'Mismatch between definition and access of `inputFormat`. Could not downcast to TypeId { t: 9919015677752515272 }, need to downcast to TypeId { t: 3422896439451675198 }
', /home/audettem/.cargo/registry/src/github.com-1ecc6299db9ec823/clap_builder-4.2.4/src/parser/error.rs:32:9
stack backtrace:
   0:     0x56210f469ca0 - std::backtrace_rs::backtrace::libunwind::trace::ha9053a9a07ca49cb
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x56210f469ca0 - std::backtrace_rs::backtrace::trace_unsynchronized::h9c2852a457ad564e
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x56210f469ca0 - std::sys_common::backtrace::_print_fmt::h457936fbfaa0070f
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x56210f469ca0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h5779d7bf7f70cb0c
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x56210f3fb1be - core::fmt::write::h5a4baaff1bcd3eb5
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/core/src/fmt/mod.rs:1232:17
   5:     0x56210f4464f4 - std::io::Write::write_fmt::h4bc1f301cb9e9cce
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/io/mod.rs:1684:15
   6:     0x56210f46b1a7 - std::sys_common::backtrace::_print::h5fcdc36060f177e8
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/sys_common/backtrace.rs:47:5
   7:     0x56210f46b1a7 - std::sys_common::backtrace::print::h54ca9458b876c8bf
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/sys_common/backtrace.rs:34:9
   8:     0x56210f46af45 - std::panicking::default_hook::{{closure}}::hbe471161c7664ed6
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/panicking.rs:271:22
   9:     0x56210f46b52a - std::panicking::default_hook::ha3500da57aa4ac4f
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/panicking.rs:290:9
  10:     0x56210f46b52a - std::panicking::rust_panic_with_hook::h50c09d000dc561d2
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/panicking.rs:692:13
  11:     0x56210f46b354 - std::panicking::begin_panic_handler::{{closure}}::h9e2b2176e00e0d9c
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/panicking.rs:583:13
  12:     0x56210f46b2b6 - std::sys_common::backtrace::__rust_end_short_backtrace::h5739b8e512c09d02
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/sys_common/backtrace.rs:150:18
  13:     0x56210f46b2a1 - rust_begin_unwind
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/panicking.rs:579:5
  14:     0x56210f39d032 - core::panicking::panic_fmt::hf33a1475b4dc5c3e
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/core/src/panicking.rs:64:14
  15:     0x56210f3acb68 - clap_builder::parser::matches::arg_matches::ArgMatches::get_one::h656f7308b6e353a0
  16:     0x56210f3b7b81 - noctilucent::main::h615327d183ce36c5
  17:     0x56210f3ae033 - std::sys_common::backtrace::__rust_begin_short_backtrace::ha308490c506925fd
  18:     0x56210f3b9f70 - main
  19:     0x7f1cc168a13a - __libc_start_main
  20:     0x56210f3a773a - _start
  21:                0x0 - <unknown>

Also doesn't work when specifying inputFormat:

./target/release/noctilucent ~/beta-iad-fdn-template.yml ~/noct_output --input-format=yaml
thread 'main' panicked at 'Mismatch between definition and access of `inputFormat`. Could not downcast to TypeId { t: 9919015677752515272 }, need to downcast to TypeId { t: 3422896439451675198 }
', /home/audettem/.cargo/registry/src/github.com-1ecc6299db9ec823/clap_builder-4.2.4/src/parser/error.rs:32:9
stack backtrace:
   0:     0x55a318ee8ca0 - std::backtrace_rs::backtrace::libunwind::trace::ha9053a9a07ca49cb
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x55a318ee8ca0 - std::backtrace_rs::backtrace::trace_unsynchronized::h9c2852a457ad564e
                               at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5

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.