Async URLSession JSON fetch

Swift
import Foundation

struct Repo: Decodable {
    let name: String
    let htmlURL: URL

    enum CodingKeys: String, CodingKey {
        case name
        case htmlURL = "html_url"
    }
}

func fetchRepos(user: String) async throws -> [Repo] {
    var request = URLRequest(url: URL(string: "https://api.github.com/users/\(user)/repos")!)
    request.setValue("bits-example", forHTTPHeaderField: "User-Agent")
    request.timeoutInterval = 10

    let (data, response) = try await URLSession.shared.data(for: request)
    guard let http = response as? HTTPURLResponse, http.statusCode == 200 else {
        throw URLError(.badServerResponse)
    }
    return try JSONDecoder().decode([Repo].self, from: data)
}