Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1219,9 +1219,6 @@ function getSerializationExpressionForFlatten(
!isReadOnly(p) &&
!isMetadata(context.program, p.__raw!)
);
if (validProps.length === 0) {
return `undefined`;
}
const optionalPrefix = property.optional
? `${resolveReference(SerializationHelpers.areAllPropsUndefined)}(${propertyPath}, [${validProps
.map((p) => `"${p.name}"`)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Should handle flatten model with all readonly properties correctly

## TypeSpec

This is tsp definition.

```tsp

model SolutionProperties {
@visibility(Lifecycle.Read)
solutionId?: string;

@visibility(Lifecycle.Read)
title?: string;

@visibility(Lifecycle.Read)
content?: string;
}
model Solution{
@Azure.ClientGenerator.Core.Legacy.flattenProperty
properties: SolutionProperties;
@Azure.ClientGenerator.Core.Legacy.flattenProperty
propertiesOptional?: SolutionProperties;
}
op test(@body body:Solution):void;

```

Enable the raw content with TCGC dependency.

```yaml
needTCGC: true
```

## Models

```ts models
import { areAllPropsUndefined } from "../static-helpers/serialization/check-prop-undefined.js";

/**
* This file contains only generated model types and their (de)serializers.
* Disable the following rules for internal models with '_' prefix and deserializers which require 'any' for raw JSON input.
*/
/* eslint-disable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
/** model interface Solution */
export interface Solution {
readonly solutionId?: string;
readonly title?: string;
readonly content?: string;
readonly solutionIdPropertiesOptionalSolutionId?: string;
readonly titlePropertiesOptionalTitle?: string;
readonly contentPropertiesOptionalContent?: string;
}

export function solutionSerializer(item: Solution): any {
return {
properties: _solutionPropertiesSerializer(item),
propertiesOptional: areAllPropsUndefined(item, [])
? undefined
: _solutionPropertiesOptionalSerializer(item),
};
}

/** model interface SolutionProperties */
export interface SolutionProperties {
readonly solutionId?: string;
readonly title?: string;
readonly content?: string;
}

export function solutionPropertiesSerializer(item: SolutionProperties): any {
return item;
}

export function _solutionPropertiesSerializer(item: Solution): any {
return item;
}

export function _solutionPropertiesOptionalSerializer(item: Solution): any {
return item;
}
```
Loading