#include "option.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
Option Option_none(void) {
Option opt;
opt.tag = Option_None;
opt.value = NULL;
return opt;
}
Option Option_some(void* value) {
Option opt;
opt.tag = Option_Some;
opt.value = value;
return opt;
}
bool Option_is_some(Option* self) {
if (!self) return false;
return self->tag == Option_Some;
}
bool Option_is_none(Option* self) {
if (!self) return true;
return self->tag == Option_None;
}
void* Option_unwrap(Option* self) {
if (!self) {
fprintf(stderr, "Option_unwrap: NULL pointer\n");
return NULL;
}
if (self->tag == Option_None) {
fprintf(stderr, "Option_unwrap: called on None\n");
return NULL;
}
return self->value;
}
void* Option_unwrap_or(Option* self, void* default_value) {
if (!self) return default_value;
if (self->tag == Option_None) {
return default_value;
}
return self->value;
}
void* Option_unwrap_or_null(Option* self) {
if (!self) return NULL;
if (self->tag == Option_None) {
return NULL;
}
return self->value;
}