Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow defaults for declarations #2359

Open
bterlson opened this issue Sep 4, 2023 · 3 comments
Open

Allow defaults for declarations #2359

bterlson opened this issue Sep 4, 2023 · 3 comments
Assignees
Labels
design:accepted Proposal for design has been discussed and accepted. triaged:core

Comments

@bterlson
Copy link
Member

bterlson commented Sep 4, 2023

It would be nice to allow specifying defaults on a declaration. For example, something like:

@default(10)
scalar rating extends int8;
// or
scalar rating extends int8 = 10;

declare x = { a: string } = #{ a: "hi" };

@default(#{ x: 0, y: 0 })
model Point {
  x: float64;
  y: float64;
} = #{ x: 0, y: 0 };

Otherwise you have to make sure to apply this default everywhere rating is used, or create an anonymous model to spread in. Neither are particularly palatable.

Object defaults probably depend on the # syntax, and the sketched default decorator has similar dependencies to #514.

@markcowl markcowl added the design:needed A design request has been raised that needs a proposal label Sep 6, 2023
@markcowl markcowl added this to the [2023] October milestone Sep 6, 2023
@markcowl
Copy link
Contributor

markcowl commented Sep 6, 2023

OpenAI

@mikekistler
Copy link
Member

mikekistler commented Sep 6, 2023

Regarding defaults for objects, why not specify the defaults on the properties, e.g.

model Point {
  x: float32 = 0.0;
  y: float32 = 0.0;
}

Note: I changed x and y to float32 because of #2377

Playground link

Also, why is y quoted in the emitted OpenAPI and not x?

image

@bterlson
Copy link
Member Author

bterlson commented Sep 6, 2023

I think the semantics are slightly different, perhaps in a too-subtle sort of way. The default on the model says, when this model is absent, here's the value to use, whereas the default on properties say, when this property is absent, here's the property value to use. The model default for example must include all required properties without defaults since it must be a valid instance of model, but this is not necessarily the case for a given model with only property defaults, because its required fields may not have defaults.

I think y is quoted because its a yaml keyword for True without quotes (short for Yes).

@markcowl markcowl modified the milestones: [2024] January, [2024] March Jan 25, 2024
@markcowl markcowl modified the milestones: [2024] March, [2024] April Mar 11, 2024
@markcowl markcowl modified the milestones: [2024] April, [2024] May Apr 8, 2024
@markcowl markcowl added design:accepted Proposal for design has been discussed and accepted. and removed design:needed A design request has been raised that needs a proposal labels Apr 10, 2024
@markcowl markcowl added this to the [2024] May milestone Apr 23, 2024
@markcowl markcowl removed this from the [2024] May milestone May 7, 2024
@bterlson bterlson removed the OpenAI label May 10, 2024
github-merge-queue bot pushed a commit that referenced this issue Oct 10, 2024
## Previous non-string expandable enum implementation
- Branded
  - Swagger(ExpandableStringEnum, serialization having trouble)
  - TypeSpec(ExpandableStringEnum, serialization having trouble)
- Unbranded
  - ExpandableEnum interface

## After this PR
- Branded
- Swagger(ExpandableEnum interface implementation, with
serialization/deserialization supported)
- TypeSpec(ExpandableEnum interface implementation, with
serialization/deserialization supported)
- Unbranded(untouched, supported)

## Limitations
- Only supports string and number extensible enums.
- Current TypeSpec doesn't support extensible boolean enum:
Azure/typespec-azure#1162
- Current TypeSpec doesn't seem to have literals other than string,
number and boolean(I can't make object literals work):
#2359

## About this PR's commits
- **TypeSpec code(main purpose)**:
29841a7
- TypeSpec test case in d37d396
- Swagger test case in autorest.java
Azure/autorest.java#2953
- Swagger serialization fix: e8454cf
- script change for build: 54af0f1
- A minor mapper bug fix: 41673da

---------

Co-authored-by: Weidong Xu <[email protected]>
swatkatz pushed a commit to swatkatz/typespec that referenced this issue Nov 5, 2024
…osoft#4492)

## Previous non-string expandable enum implementation
- Branded
  - Swagger(ExpandableStringEnum, serialization having trouble)
  - TypeSpec(ExpandableStringEnum, serialization having trouble)
- Unbranded
  - ExpandableEnum interface

## After this PR
- Branded
- Swagger(ExpandableEnum interface implementation, with
serialization/deserialization supported)
- TypeSpec(ExpandableEnum interface implementation, with
serialization/deserialization supported)
- Unbranded(untouched, supported)

## Limitations
- Only supports string and number extensible enums.
- Current TypeSpec doesn't support extensible boolean enum:
Azure/typespec-azure#1162
- Current TypeSpec doesn't seem to have literals other than string,
number and boolean(I can't make object literals work):
microsoft#2359

## About this PR's commits
- **TypeSpec code(main purpose)**:
29841a7
- TypeSpec test case in d37d396
- Swagger test case in autorest.java
Azure/autorest.java#2953
- Swagger serialization fix: e8454cf
- script change for build: 54af0f1
- A minor mapper bug fix: 41673da

---------

Co-authored-by: Weidong Xu <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
design:accepted Proposal for design has been discussed and accepted. triaged:core
Projects
None yet
Development

No branches or pull requests

3 participants