httpie/cli

Failed to use {{key}}={{value}} for nested JSON

Closed this issue · 1 comments

Hi! I wanna write a function to create a GitHub gist. This is what I wrote:

function gists__new --description "Create a gist for the authenticated user"
    argparse l/login= p/pat= d/description= P/public f/file= c/content= -- $argv

    set login $_flag_login
    set pat $_flag_pat
    set description $_flag_description

    set public false
    set --query _flag_public && set public true

    set file $_flag_file
    set content $_flag_content

    set body "$(jq --null-input '{
            "description": $description,
            "public": $public,
            "files": {
                ($file): {
                "content": $content
                }
            }
        }' \
        --arg description $description \
        --arg public $public \
        --arg file $file \
        --arg content $content)"

    https --auth "$login:$pat" POST api.github.com/gists \
        Accept:application/vnd.github+json \
        X-GitHub-Api-Version:$api_version \
        --raw $body
end

It works, but requires jq. According to HTTPie docs I can get rid of it. I tried to use {{key}}={{value}} but failed:

function gists__new --description "Create a gist for the authenticated user"
    argparse l/login= p/pat= d/description= P/public f/file= c/content= -- $argv

    set login $_flag_login
    set pat $_flag_pat
    set description $_flag_description

    set public false
    set --query _flag_public && set public true

    set file $_flag_file
    set content $_flag_content

    https --auth "$login:$pat" POST api.github.com/gists \
        "description=$description" \
        "public=$public" \
        "files[$file][content]=$content" \
        Accept:application/vnd.github+json \
        X-GitHub-Api-Version:$api_version \
end

The response I get is:

{
    "documentation_url": "https://docs.github.com/rest/gists/gists#create-a-gist",
    "message": "Invalid request.\n\nInvalid input: object is missing required key: files."
}

What am I doing wrong?

I checked my HTTPie version, and it was outdated, update to the latest version solved this problem.