File: HTTPBodySection.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (47 lines) | stat: -rw-r--r-- 1,896 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2023 Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See https://swift.org/LICENSE.txt for license information
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

/// A section that contains a request's upload body.
public struct HTTPBodySection {
    public static var title: String {
        return "Request Body"
    }
    
    /// The request body.
    public var body: HTTPBody
    
    /// Merge two bodies together.
    /// 
    /// Merges in documentation and symbols to existing value.
    mutating public func mergeBody(_ newBody: HTTPBody) {
        // Create a new body that combines the best of both.
        if body.contents.isEmpty {
            body.contents = newBody.contents
        }
        if body.mediaType == nil {
            body.mediaType = newBody.mediaType
        }
        if body.symbol == nil {
            body.symbol = newBody.symbol
        }
        if body.parameters.isEmpty {
            body.parameters = newBody.parameters
        } else if !newBody.parameters.isEmpty {
            // Update existing parameters with new data being passed in.
            body.parameters = body.parameters.insertAndUpdate(newBody.parameters) { existingParameter, newParameter in
                let contents = existingParameter.contents.count > 0 ? existingParameter.contents : newParameter.contents
                let symbol = existingParameter.symbol ?? newParameter.symbol
                let source = existingParameter.source ?? newParameter.source
                let required = existingParameter.required || newParameter.required
                return HTTPParameter(name: existingParameter.name, source: source, contents: contents, symbol: symbol, required: required)
            }
        }
    }
}