/*
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
namespace Facebook\HackCodegen;
/**
* Generate code for a constant that is not part of a class.
*
* @see IHackCodegenFactory::codegenConstant
*/
abstract class CodegenConstantish implements ICodeBuilderRenderer {
private ?string $comment;
private ?string $value = null;
/** @selfdocumenting */
public function __construct(
protected IHackCodegenConfig $config,
private string $name,
) {
}
/** @selfdocumenting */
public function getName(): string {
return $this->name;
}
/** Returns the value as code */
public function getValue(): ?string {
return $this->value;
}
/** @selfDocumenting */
public function getDocBlock(): ?string {
return $this->comment;
}
/** @selfdocumenting */
public function setDocBlock(string $comment): this {
$this->comment = $comment;
return $this;
}
/**
* Set the value of the constant using a renderer.
*
* @param $renderer a renderer for the value. In general, this should be
* created using `HackBuilderValues`
*/
public function setValue(
T $value,
IHackBuilderValueRenderer $renderer,
): this {
$this->value = $renderer->render($this->config, $value);
return $this;
}
}