Skip to content

Instantly share code, notes, and snippets.

View lucasteles's full-sized avatar
:shipit:
Ship it!

Lucas Teles lucasteles

:shipit:
Ship it!
View GitHub Profile
@lucasteles
lucasteles / Program.cs
Last active September 20, 2023 19:56
C# UDP Socket
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using static System.Text.Encoding;
using static System.Console;
const int MaxUdpByteSize = 65527;
static Socket CreateSocket(int port)
{
@lucasteles
lucasteles / ResultBuilder.fs
Last active July 26, 2023 16:12
Applicative and Monadic Result builder
module Result =
let join x1 x2 =
match x1, x2 with
| Ok x1res, Ok x2res -> Ok(x1res, x2res)
| Error e1, Error e2 -> Error(e1 @ e2)
| Error e, _
| _, Error e -> Error e
type ResultBuilder() =

ER

---
title: Order example
---
erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE-ITEM : contains
 CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
@lucasteles
lucasteles / CustomHttpHandler.cs
Last active December 9, 2022 18:46
Custom HttpClient Handler
public class UrlServiceResolverHandler : DelegatingHandler
{
readonly ILogger<UrlServiceResolverHandler> logger;
public UrlServiceResolverHandler(ILogger<UrlServiceResolverHandler> logger)
{
this.logger = logger;
InnerHandler = new HttpClientHandler();
}
@lucasteles
lucasteles / Compressor.cs
Created November 25, 2022 02:34
Gzip compressor C#
using System.IO.Compression;
using System.Text;
interface ICompressor
{
public const string Header = "[z]";
Task<string> Compress(string text);
Task<string> Decompress(string text);
}
@lucasteles
lucasteles / DateUtc.cs
Created November 8, 2022 16:25
Date UTC struct C#
using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Heptapod.Models.Values;
[JsonConverter(typeof(UtcJsonConverter))]
public readonly struct DateUtc
{
public DateUtc(DateTime dateTime) => DateTime = dateTime.ToUniversalTime();
@lucasteles
lucasteles / monad.fsx
Last active November 1, 2022 23:16
option monad on fsharp
open System
//Helpers
let printOpt opt =
match opt with
|None -> printfn "None"
|Some v -> printfn "Some %s" v
// safe functions
let exclaimIt str = if str = "" then None else Some (str + "!")
@lucasteles
lucasteles / Result.cs
Created October 7, 2022 18:59
Result C# 2022
public abstract record Result<TOk, TError>
{
public sealed record Ok(TOk Value) : Result<TOk, TError>
{
public override TOk Default(TOk defaultValueIfError) => Value;
public override T Match<T>(Func<TOk, T> ok, Func<TError, T> error) => ok(Value);
public override Result<TMap, TError> Select<TMap>(Func<TOk, TMap> map) => map(Value);
public override Result<TMap, TError> Bind<TMap>(Func<TOk, Result<TMap, TError>> bind) => bind(Value);
public override bool IsError => false;
}
@lucasteles
lucasteles / enumDescriptionExtension.cs
Created August 25, 2022 14:11
enum get Description
using System.ComponentModel;
public static string GetDescription<T>(this T option) where T : Enum => option
.GetType().GetMember(option.ToString())
.SelectMany(p => p.GetCustomAttributes(typeof(DescriptionAttribute), true))
.FirstOrDefault() is DescriptionAttribute attr
? attr.Description
: option.ToString();
@lucasteles
lucasteles / ResultSample.cs
Last active August 16, 2022 11:54
Result<TOk,TError> C# Sample
using System;
#region 'Implementaçao exemplo do result'
public static class Result {
public static Result<TSuccess,TFailure> Ok<TSuccess, TFailure>(TSuccess value) => new OkResult<TSuccess, TFailure>(value);
public static Result<TSuccess,TFailure> Error<TSuccess, TFailure>(TFailure value) => new ErrorResult<TSuccess, TFailure>(value);
}
public abstract class Result<TOk, TError> {