Skip to content

Instantly share code, notes, and snippets.

View farzadshbfn's full-sized avatar

Farzad Sharbafian farzadshbfn

View GitHub Profile
@farzadshbfn
farzadshbfn / clang-format@8.rb
Created February 19, 2020 18:02 — forked from ffeu/clang-format@7.rb
clang-format version 8 (8.0.0) formula for brew (check comment below on how to install it)
class ClangFormatAT8 < Formula
desc "Formatting tool for C/C++/Java/JavaScript/Objective-C/Protobuf"
homepage "https://releases.llvm.org/8.0.0/tools/clang/docs/ClangFormat.html"
version "8.0.0"
if MacOS.version >= :sierra
url "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_800/final/", :using => :svn
else
url "http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_800/final/", :using => :svn
end
struct User: Codable {
typealias Id = String
let id: Id
let cellNumber: CellNumber
let status: Status
enum Status {
case notRegistered
// MARK:- User Helper methods
extension User {
var isRegistered: Bool {
return status.isRegistered
}
var profile: Profile? {
return status.profile
}
}
struct User {
typealias Id = String
let id: Id
let cellNumber: CellNumber
let status: Status
enum Status {
case notRegistered
case registered(profile: Profile)
extension User {
struct Profile {
let name: String
let lastName: String
let email: Email?
let isEmailVerified: Bool
}
}
extension User.Profile: Codable {
struct CellNumber: Codable {
let digits: String
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let rawDigits = try container.decode(String.self)
// validate rawDigits by some Regex maybe? and throw appropriate errors?
// or extract CountryCode and AreaCode and save them in another way?
digits = rawDigits
}
// not registered user
"user": {
"id": "a_unique_id",
"cell_number": "+989354358291",
"is_registered": false
}
// registered user
"user": {
"id": "a_unique_id",
"cell_number": "+989354358291",
struct User {
typealias Id = String
let id: Id
let cellNumber: CellNumber
let status: Status
enum Status {
case notRegistered
struct User {
typealias Id = String
let id: Id
let cellNumber: CellNumber
let isRegistered: Bool
let profile: Profile?
struct Profile {
typealias UserId = String
struct User {
let id: UserId
let cellNumber: CellNumber
let isRegistered: Bool
let profile: UserProfile?
}
struct UserProfile {