Convert GraphQLRequest and ArgumentValue to record types#87
Open
jonasessen wants to merge 1 commit intoLinq2GraphQL:mainfrom
Open
Convert GraphQLRequest and ArgumentValue to record types#87jonasessen wants to merge 1 commit intoLinq2GraphQL:mainfrom
jonasessen wants to merge 1 commit intoLinq2GraphQL:mainfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
GraphQLRequestandArgumentValueare plain data-transfer objects — they exist solely to hold values with no behaviour. They are currently defined asclasstypes, which:Solution
Convert both to C#
recordtypes, which are designed exactly for this purpose.GraphQLRequest— fully immutable. Both properties becomeinit-only since the object is constructed once and never mutated:ArgumentValue— mostly immutable.GraphName,GraphType, andValueare set at construction and never changed (init).VariableNameremainssetbecause the query builder appends a uniqueness suffix to it during query construction — this is noted with a comment.Benefits
init-only properties prevent accidental mutation after constructionwithexpressions — callers can cleanly create modified copies:request with { Query = newQuery }ToString()— records produce a readable representation automatically, useful for debuggingCompatibility
Both changes are fully backward-compatible. Object initializer syntax (
new GraphQLRequest { Query = ..., Variables = ... }) works identically withinitproperties.🤖 Generated with Claude Code